From 8e3bb54508216a54c53537b369ccd9c904a0dc99 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Wed, 2 Oct 2019 15:09:19 +0300 Subject: [PATCH] added endpoint for retrieving collection detail information --- apps/collection/serializers/common.py | 24 ++++++++++------ apps/collection/urls/common.py | 1 + apps/collection/views/common.py | 40 ++++++++++----------------- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/apps/collection/serializers/common.py b/apps/collection/serializers/common.py index f7319561..78612a55 100644 --- a/apps/collection/serializers/common.py +++ b/apps/collection/serializers/common.py @@ -4,11 +4,24 @@ from collection import models from location import models as location_models -class CollectionSerializer(serializers.ModelSerializer): - """Collection serializer""" +class CollectionBaseSerializer(serializers.ModelSerializer): + """Collection base serializer""" # RESPONSE description_translated = serializers.CharField(read_only=True, allow_null=True) + class Meta: + model = models.Collection + fields = [ + 'id', + 'name', + 'description_translated', + 'image_url', + 'slug', + ] + + +class CollectionSerializer(CollectionBaseSerializer): + """Collection serializer""" # COMMON block_size = serializers.JSONField() is_publish = serializers.BooleanField() @@ -24,18 +37,13 @@ class CollectionSerializer(serializers.ModelSerializer): class Meta: model = models.Collection - fields = [ - 'id', - 'name', - 'description_translated', + fields = CollectionBaseSerializer.Meta.fields + [ 'start', 'end', - 'image_url', 'is_publish', 'on_top', 'country', 'block_size', - 'slug', ] diff --git a/apps/collection/urls/common.py b/apps/collection/urls/common.py index 7ffa50cf..36801ac5 100644 --- a/apps/collection/urls/common.py +++ b/apps/collection/urls/common.py @@ -7,6 +7,7 @@ app_name = 'collection' urlpatterns = [ path('', views.CollectionHomePageView.as_view(), name='list'), + path('/', views.CollectionDetailView.as_view(), name='detail'), path('/establishments/', views.CollectionEstablishmentListView.as_view(), name='detail'), diff --git a/apps/collection/views/common.py b/apps/collection/views/common.py index fd2a4584..16a42f58 100644 --- a/apps/collection/views/common.py +++ b/apps/collection/views/common.py @@ -12,7 +12,14 @@ from collection.serializers import common as serializers class CollectionViewMixin(generics.GenericAPIView): """Mixin for Collection view""" model = models.Collection - queryset = models.Collection.objects.all() + permission_classes = (permissions.AllowAny,) + + def get_queryset(self): + """Override get_queryset method.""" + return models.Collection.objects.published() \ + .by_country_code(code=self.request.country_code) \ + .filter_all_related_gt(3) \ + .order_by('-on_top', '-modified') class GuideViewMixin(generics.GenericAPIView): @@ -23,41 +30,22 @@ class GuideViewMixin(generics.GenericAPIView): # Views # Collections -class CollectionListView(CollectionViewMixin, generics.ListAPIView): - """List Collection view""" - permission_classes = (permissions.AllowAny,) - serializer_class = serializers.CollectionSerializer - - def get_queryset(self): - """Override get_queryset method""" - queryset = models.Collection.objects.published()\ - .by_country_code(code=self.request.country_code)\ - .order_by('-on_top', '-created') - - return queryset - - class CollectionHomePageView(CollectionViewMixin, generics.ListAPIView): """List Collection view""" - permission_classes = (permissions.AllowAny,) serializer_class = serializers.CollectionSerializer - def get_queryset(self): - """Override get_queryset method""" - queryset = models.Collection.objects.published()\ - .by_country_code(code=self.request.country_code)\ - .filter_all_related_gt(3)\ - .order_by('-on_top', '-modified') - return queryset +class CollectionDetailView(CollectionViewMixin, generics.RetrieveAPIView): + """Retrieve detail of Collection instance.""" + lookup_field = 'slug' + serializer_class = serializers.CollectionBaseSerializer -class CollectionEstablishmentListView(CollectionListView): +class CollectionEstablishmentListView(CollectionHomePageView): """Retrieve list of establishment for collection.""" - permission_classes = (permissions.AllowAny,) + lookup_field = 'slug' pagination_class = ProjectPageNumberPagination serializer_class = EstablishmentBaseSerializer - lookup_field = 'slug' def get_queryset(self): """