added product RUD-endpoints for back-office

This commit is contained in:
Anatoly 2019-11-12 18:50:51 +03:00
parent 8dc966b185
commit 83a3444c95
5 changed files with 53 additions and 19 deletions

View File

@ -7,5 +7,4 @@ app_name = 'collection'
urlpatterns = [
path('', views.CollectionListCreateView.as_view(), name='list-create'),
]
]

View File

@ -3,6 +3,7 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from product import models
from product.serializers import ProductDetailSerializer
from gallery.models import Image
@ -42,3 +43,28 @@ class ProductBackOfficeGallerySerializer(serializers.ModelSerializer):
attrs['image'] = image
return attrs
class ProductBackOfficeDetailSerializer(ProductDetailSerializer):
class Meta(ProductDetailSerializer.Meta):
fields = ProductDetailSerializer.Meta.fields + [
'description',
'available',
'product_type',
'establishment',
'wine_region',
'wine_sub_region',
'wine_village',
'state',
]
extra_kwargs = {
'description': {'write_only': True},
'available': {'write_only': True},
'product_type': {'write_only': True},
'establishment': {'write_only': True},
'wine_region': {'write_only': True},
'wine_sub_region': {'write_only': True},
'wine_village': {'write_only': True},
'state': {'write_only': True},
}

View File

@ -72,11 +72,13 @@ class ProductStandardBaseSerializer(serializers.ModelSerializer):
class ProductBaseSerializer(serializers.ModelSerializer):
"""Product base serializer."""
product_type = serializers.CharField(source='product_type_translated_name')
subtypes = ProductSubTypeBaseSerializer(many=True)
establishment = EstablishmentShortSerializer()
tags = TagBaseSerializer(source='related_tags', many=True)
preview_image_url = serializers.URLField(source='preview_main_image_url', allow_null=True)
product_type = serializers.CharField(source='product_type_translated_name', read_only=True)
subtypes = ProductSubTypeBaseSerializer(many=True, read_only=True)
establishment_detail = EstablishmentShortSerializer(source='establishment', read_only=True)
tags = TagBaseSerializer(source='related_tags', many=True, read_only=True)
preview_image_url = serializers.URLField(source='preview_main_image_url',
allow_null=True,
read_only=True)
class Meta:
"""Meta class."""
@ -88,7 +90,7 @@ class ProductBaseSerializer(serializers.ModelSerializer):
'product_type',
'subtypes',
'public_mark',
'establishment',
'establishment_detail',
'vintage',
'tags',
'preview_image_url',
@ -98,17 +100,18 @@ class ProductBaseSerializer(serializers.ModelSerializer):
class ProductDetailSerializer(ProductBaseSerializer):
"""Product detail serializer."""
description_translated = TranslatedField()
review = ReviewShortSerializer(source='last_published_review')
awards = AwardSerializer(many=True)
establishment = EstablishmentProductSerializer()
classifications = ProductClassificationBaseSerializer(many=True)
standards = ProductStandardBaseSerializer(many=True)
wine_region = WineRegionBaseSerializer()
wine_sub_region = WineSubRegionBaseSerializer()
wine_colors = TagBaseSerializer(many=True)
bottles_produced = TagBaseSerializer(many=True)
sugar_contents = TagBaseSerializer(many=True)
image_url = serializers.ImageField(source='main_image_url', allow_null=True)
review = ReviewShortSerializer(source='last_published_review', read_only=True)
awards = AwardSerializer(many=True, read_only=True)
classifications = ProductClassificationBaseSerializer(many=True, read_only=True)
standards = ProductStandardBaseSerializer(many=True, read_only=True)
wine_region = WineRegionBaseSerializer(read_only=True)
wine_sub_region = WineSubRegionBaseSerializer(read_only=True)
wine_colors = TagBaseSerializer(many=True, read_only=True)
bottles_produced = TagBaseSerializer(many=True, read_only=True)
sugar_contents = TagBaseSerializer(many=True, read_only=True)
image_url = serializers.ImageField(source='main_image_url',
allow_null=True,
read_only=True)
class Meta(ProductBaseSerializer.Meta):
fields = ProductBaseSerializer.Meta.fields + [

View File

@ -4,6 +4,7 @@ from product.urls.common import urlpatterns as common_urlpatterns
from product import views
urlpatterns = [
path('<int:pk>/', views.ProductDetailBackOfficeView.as_view(), name='rud'),
path('<int:pk>/gallery/', views.ProductBackOfficeGalleryListView.as_view(),
name='gallery-list'),
path('<int:pk>/gallery/<int:image_id>/', views.ProductBackOfficeGalleryCreateDestroyView.as_view(),

View File

@ -73,3 +73,8 @@ class ProductBackOfficeGalleryListView(ProductBackOfficeMixinView, generics.List
def get_queryset(self):
"""Override get_queryset method."""
return self.get_object().gallery.all()
class ProductDetailBackOfficeView(ProductBackOfficeMixinView, generics.RetrieveUpdateDestroyAPIView):
"""Product back-office R/U/D view."""
serializer_class = serializers.ProductBackOfficeDetailSerializer