diff --git a/apps/collection/serializers/common.py b/apps/collection/serializers/common.py index e588ae8e..d3d58a92 100644 --- a/apps/collection/serializers/common.py +++ b/apps/collection/serializers/common.py @@ -96,3 +96,43 @@ class GuideBaseSerializer(serializers.ModelSerializer): extra_kwargs = { 'state': {'write_only': True}, } + + +class GuideFilterBaseSerializer(serializers.ModelSerializer): + """GuideFilter serializer""" + + class Meta: + """Meta class.""" + model = models.GuideFilter + fields = [ + 'id', + 'establishment_type_json', + 'country_json', + 'region_json', + 'sub_region_json', + 'wine_region_json', + 'with_mark', + 'locale_json', + 'max_mark', + 'min_mark', + 'review_vintage_json', + 'review_state_json', + 'guide', + ] + extra_kwargs = { + 'guide': {'write_only': True} + } + + @property + def request_kwargs(self): + """Get url kwargs from request.""" + return self.context.get('request').parser_context.get('kwargs') + + def get_guide(self): + """Get guide instance from kwargs.""" + return self.request_kwargs.get() + + def create(self, validated_data): + """Overridden create method.""" + validated_data['guide'] = self.get_guide(validated_data.pop('guide', None)) + return super().create(validated_data) diff --git a/apps/collection/urls/back.py b/apps/collection/urls/back.py index 0c6a2816..6db5bde2 100644 --- a/apps/collection/urls/back.py +++ b/apps/collection/urls/back.py @@ -1,5 +1,6 @@ """Collection common urlpaths.""" from rest_framework.routers import SimpleRouter +from django.urls import path from collection.views import back as views @@ -7,6 +8,10 @@ app_name = 'collection' router = SimpleRouter() router.register(r'collections', views.CollectionBackOfficeViewSet) -router.register(r'guides', views.GuideBackOfficeViewSet) -urlpatterns = router.urls +urlpatterns = [ + path('guides/', views.GuideListCreateView.as_view(), + name='guide-list-create'), + path('guides//filters/', views.GuideFilterCreateView.as_view(), + name='guide-filter-list-create'), +] + router.urls diff --git a/apps/collection/views/back.py b/apps/collection/views/back.py index 276aa056..05d09f20 100644 --- a/apps/collection/views/back.py +++ b/apps/collection/views/back.py @@ -1,5 +1,5 @@ from rest_framework import permissions -from rest_framework import viewsets, mixins +from rest_framework import viewsets, mixins, generics from collection import models, serializers from utils.views import BindObjectMixin @@ -14,7 +14,7 @@ class CollectionViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): serializer_class = serializers.CollectionBackOfficeSerializer -class GuideViewSet(viewsets.ModelViewSet): +class GuideBaseView(generics.GenericAPIView): """ViewSet for Guide model.""" pagination_class = None queryset = models.Guide.objects.all() @@ -22,6 +22,14 @@ class GuideViewSet(viewsets.ModelViewSet): permission_classes = (permissions.IsAuthenticated,) +class GuideFilterBaseView(generics.GenericAPIView): + """ViewSet for GuideFilter model.""" + pagination_class = None + queryset = models.GuideFilter.objects.all() + serializer_class = serializers.GuideFilterBaseSerializer + permission_classes = (permissions.IsAuthenticated,) + + class CollectionBackOfficeViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, @@ -54,5 +62,11 @@ class CollectionBackOfficeViewSet(mixins.CreateModelMixin, collection.products.remove(related_object) -class GuideBackOfficeViewSet(GuideViewSet): +class GuideListCreateView(GuideBaseView, + generics.ListCreateAPIView): """ViewSet for Guide model for BackOffice users.""" + + +class GuideFilterCreateView(GuideFilterBaseView, + generics.CreateAPIView): + """ViewSet for GuideFilter model for BackOffice users.""" diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index a1b6cc4a..d5942f2f 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -225,18 +225,19 @@ class EstablishmentBackOfficeGallerySerializer(serializers.ModelSerializer): 'is_main', ] - def get_request_kwargs(self): + @property + def request_kwargs(self): """Get url kwargs from request.""" return self.context.get('request').parser_context.get('kwargs') def validate(self, attrs): """Override validate method.""" - establishment_pk = self.get_request_kwargs().get('pk') - establishment_slug = self.get_request_kwargs().get('slug') + establishment_pk = self.request_kwargs.get('pk') + establishment_slug = self.request_kwargs.get('slug') search_kwargs = {'pk': establishment_pk} if establishment_pk else {'slug': establishment_slug} - image_id = self.get_request_kwargs().get('image_id') + image_id = self.request_kwargs.get('image_id') establishment_qs = models.Establishment.objects.filter(**search_kwargs) image_qs = Image.objects.filter(id=image_id) diff --git a/apps/location/serializers/back.py b/apps/location/serializers/back.py index 9a263acd..8f231d69 100644 --- a/apps/location/serializers/back.py +++ b/apps/location/serializers/back.py @@ -35,14 +35,15 @@ class CityGallerySerializer(serializers.ModelSerializer): 'is_main', ] - def get_request_kwargs(self): + @property + def request_kwargs(self): """Get url kwargs from request.""" return self.context.get('request').parser_context.get('kwargs') def validate(self, attrs): """Override validate method.""" - city_pk = self.get_request_kwargs().get('pk') - image_id = self.get_request_kwargs().get('image_id') + city_pk = self.request_kwargs.get('pk') + image_id = self.request_kwargs.get('image_id') city_qs = models.City.objects.filter(pk=city_pk) image_qs = Image.objects.filter(id=image_id) diff --git a/apps/news/serializers.py b/apps/news/serializers.py index 86673645..37ba0a74 100644 --- a/apps/news/serializers.py +++ b/apps/news/serializers.py @@ -217,14 +217,15 @@ class NewsBackOfficeGallerySerializer(serializers.ModelSerializer): 'is_main', ] - def get_request_kwargs(self): + @property + def request_kwargs(self): """Get url kwargs from request.""" return self.context.get('request').parser_context.get('kwargs') def validate(self, attrs): """Override validate method.""" - news_pk = self.get_request_kwargs().get('pk') - image_id = self.get_request_kwargs().get('image_id') + news_pk = self.request_kwargs.get('pk') + image_id = self.request_kwargs.get('image_id') news_qs = models.News.objects.filter(pk=news_pk) image_qs = Image.objects.filter(id=image_id) diff --git a/apps/product/serializers/back.py b/apps/product/serializers/back.py index 55dc5ebc..01a1d7fe 100644 --- a/apps/product/serializers/back.py +++ b/apps/product/serializers/back.py @@ -22,14 +22,15 @@ class ProductBackOfficeGallerySerializer(serializers.ModelSerializer): 'is_main', ] - def get_request_kwargs(self): + @property + def request_kwargs(self): """Get url kwargs from request.""" return self.context.get('request').parser_context.get('kwargs') def validate(self, attrs): """Override validate method.""" - product_pk = self.get_request_kwargs().get('pk') - image_id = self.get_request_kwargs().get('image_id') + product_pk = self.request_kwargs.get('pk') + image_id = self.request_kwargs.get('image_id') product_qs = models.Product.objects.filter(pk=product_pk) image_qs = Image.objects.filter(id=image_id)