diff --git a/apps/collection/urls/back.py b/apps/collection/urls/back.py index 3ac8a073..df03df26 100644 --- a/apps/collection/urls/back.py +++ b/apps/collection/urls/back.py @@ -7,5 +7,4 @@ app_name = 'collection' urlpatterns = [ path('', views.CollectionListCreateView.as_view(), name='list-create'), - -] \ No newline at end of file +] diff --git a/apps/product/serializers/back.py b/apps/product/serializers/back.py index 3ffe5579..b217db47 100644 --- a/apps/product/serializers/back.py +++ b/apps/product/serializers/back.py @@ -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}, + } diff --git a/apps/product/serializers/common.py b/apps/product/serializers/common.py index 2849bd26..af1203ff 100644 --- a/apps/product/serializers/common.py +++ b/apps/product/serializers/common.py @@ -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 + [ diff --git a/apps/product/urls/back.py b/apps/product/urls/back.py index 3330cdd5..5ddc932c 100644 --- a/apps/product/urls/back.py +++ b/apps/product/urls/back.py @@ -4,6 +4,7 @@ from product.urls.common import urlpatterns as common_urlpatterns from product import views urlpatterns = [ + path('/', views.ProductDetailBackOfficeView.as_view(), name='rud'), path('/gallery/', views.ProductBackOfficeGalleryListView.as_view(), name='gallery-list'), path('/gallery//', views.ProductBackOfficeGalleryCreateDestroyView.as_view(), diff --git a/apps/product/views/back.py b/apps/product/views/back.py index 42c1ea71..0298ba18 100644 --- a/apps/product/views/back.py +++ b/apps/product/views/back.py @@ -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