From 9586a0adf463230b707fecdc6906d1948568f4fd Mon Sep 17 00:00:00 2001 From: Anatoly Date: Thu, 22 Aug 2019 14:53:49 +0300 Subject: [PATCH 1/2] added filter collection by country code from cookies --- apps/collection/models.py | 6 ++--- apps/collection/urls/common.py | 48 ++++++++++++++++----------------- apps/collection/views/common.py | 9 ++++--- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/apps/collection/models.py b/apps/collection/models.py index f57e7c86..6b5d4146 100644 --- a/apps/collection/models.py +++ b/apps/collection/models.py @@ -28,9 +28,9 @@ class CollectionDateMixin(models.Model): class CollectionQuerySet(models.QuerySet): """QuerySet for model Collection""" - def by_country(self, country): - """Filter collection by country.""" - return self.filter(country=country) + def by_country_code(self, code): + """Filter collection by country code.""" + return self.filter(country__code=code) def published(self): """Returned only published collection""" diff --git a/apps/collection/urls/common.py b/apps/collection/urls/common.py index 8ae1e92f..a1d98efc 100644 --- a/apps/collection/urls/common.py +++ b/apps/collection/urls/common.py @@ -8,34 +8,34 @@ app_name = 'collection' urlpatterns = [ path('list/', views.CollectionListView.as_view(), name='collections_list'), - path('create/', views.CollectionCreateView.as_view(), - name='collection_create'), - path('/', views.CollectionRetrieveView.as_view(), - name='collection_retrieve'), - path('/delete/', views.CollectionDestroyView.as_view(), - name='collection_destroy'), - path('/update/', views.CollectionUpdateView.as_view(), - name='collection_update'), + # path('create/', views.CollectionCreateView.as_view(), + # name='collection_create'), + # path('/', views.CollectionRetrieveView.as_view(), + # name='collection_retrieve'), + # path('/delete/', views.CollectionDestroyView.as_view(), + # name='collection_destroy'), + # path('/update/', views.CollectionUpdateView.as_view(), + # name='collection_update'), path('collection_items/', views.CollectionItemListView.as_view(), name='collection_items_list'), - path('collection_items/create/', views.CollectionItemCreateView.as_view(), - name='collection_items_create'), - path('collection_items//', views.CollectionItemRetrieveView.as_view(), - name='collection_items_retrieve'), - path('collection_items//delete/', views.CollectionDestroyView.as_view(), - name='collection_items_destroy'), - path('collection_items//update/', views.CollectionItemUpdateView.as_view(), - name='collection_items_update'), + # path('collection_items/create/', views.CollectionItemCreateView.as_view(), + # name='collection_items_create'), + # path('collection_items//', views.CollectionItemRetrieveView.as_view(), + # name='collection_items_retrieve'), + # path('collection_items//delete/', views.CollectionDestroyView.as_view(), + # name='collection_items_destroy'), + # path('collection_items//update/', views.CollectionItemUpdateView.as_view(), + # name='collection_items_update'), path('guides/', views.GuideListView.as_view(), name='guides_list'), - path('guides/create/', views.GuideCreateView.as_view(), - name='guide_create'), - path('guides//', views.GuideRetrieveView.as_view(), - name='guide_retrieve'), - path('guides//delete/', views.GuideDestroyView.as_view(), - name='guide_destroy'), - path('guides//update/', views.GuideUpdateView.as_view(), - name='guide_update'), + # path('guides/create/', views.GuideCreateView.as_view(), + # name='guide_create'), + # path('guides//', views.GuideRetrieveView.as_view(), + # name='guide_retrieve'), + # path('guides//delete/', views.GuideDestroyView.as_view(), + # name='guide_destroy'), + # path('guides//update/', views.GuideUpdateView.as_view(), + # name='guide_update'), ] diff --git a/apps/collection/views/common.py b/apps/collection/views/common.py index 7581974e..eb288daf 100644 --- a/apps/collection/views/common.py +++ b/apps/collection/views/common.py @@ -1,7 +1,7 @@ from rest_framework import generics from rest_framework import permissions + from collection import models -from django.conf import settings from collection.serializers import common as serializers @@ -11,6 +11,10 @@ class CollectionViewMixin(generics.GenericAPIView): model = models.Collection queryset = models.Collection.objects.all() + def get_country_code(self): + """Get country_code from cookies.""" + return self.request.COOKIES.get('country_code') + class CollectionItemViewMixin(generics.GenericAPIView): """Mixin for CollectionItem view""" @@ -32,9 +36,8 @@ class CollectionListView(CollectionViewMixin, generics.ListAPIView): def get_queryset(self): """Override get_queryset method""" - country_id = self.request.query_params.get('country_id') return models.Collection.objects.published()\ - .by_country(country=country_id) + .by_country_code(code=self.get_country_code()) class CollectionRetrieveView(CollectionViewMixin, generics.RetrieveAPIView): From e88fea10e7a86ec54072a85b34b6c9f4457602a2 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Fri, 23 Aug 2019 12:59:10 +0300 Subject: [PATCH 2/2] added fields to model Collection, refactored Collection serializer, --- .../migrations/0003_auto_20190823_0935.py | 26 +++++++++++++++++++ apps/collection/models.py | 11 +++++--- apps/collection/serializers/common.py | 8 +++--- 3 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 apps/collection/migrations/0003_auto_20190823_0935.py diff --git a/apps/collection/migrations/0003_auto_20190823_0935.py b/apps/collection/migrations/0003_auto_20190823_0935.py new file mode 100644 index 00000000..e61090e5 --- /dev/null +++ b/apps/collection/migrations/0003_auto_20190823_0935.py @@ -0,0 +1,26 @@ +# Generated by Django 2.2.4 on 2019-08-23 09:35 + +import django.contrib.postgres.fields.jsonb +from django.db import migrations +import easy_thumbnails.fields +import utils.methods + + +class Migration(migrations.Migration): + + dependencies = [ + ('collection', '0002_collection_is_publish'), + ] + + operations = [ + migrations.AddField( + model_name='collection', + name='block_size', + field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=None, help_text='{"width": "250px", "height":"250px"}', null=True, verbose_name='collection block properties'), + ), + migrations.AddField( + model_name='collection', + name='image', + field=easy_thumbnails.fields.ThumbnailerImageField(blank=True, default=None, null=True, upload_to=utils.methods.image_path, verbose_name='Image'), + ), + ] diff --git a/apps/collection/models.py b/apps/collection/models.py index 6b5d4146..a55fd832 100644 --- a/apps/collection/models.py +++ b/apps/collection/models.py @@ -1,7 +1,8 @@ +from django.contrib.postgres.fields import JSONField from django.db import models from django.utils.translation import gettext_lazy as _ -from django.contrib.postgres.fields import JSONField -from utils.models import ProjectBaseMixin + +from utils.models import ProjectBaseMixin, ImageMixin # Mixins @@ -37,7 +38,8 @@ class CollectionQuerySet(models.QuerySet): return self.filter(is_publish=True) -class Collection(ProjectBaseMixin, CollectionNameMixin, CollectionDateMixin): +class Collection(ProjectBaseMixin, CollectionNameMixin, + ImageMixin, CollectionDateMixin): """Collection model.""" is_publish = models.BooleanField( default=False, verbose_name=_('Publish status')) @@ -52,6 +54,9 @@ class Collection(ProjectBaseMixin, CollectionNameMixin, CollectionDateMixin): default=None, help_text='{"key":"value"}') country = models.ForeignKey( 'location.Country', verbose_name=_('country'), on_delete=models.CASCADE) + block_size = JSONField( + _('collection block properties'), null=True, blank=True, + default=None, help_text='{"width": "250px", "height":"250px"}') objects = CollectionQuerySet.as_manager() diff --git a/apps/collection/serializers/common.py b/apps/collection/serializers/common.py index eb5b99b5..c00922ed 100644 --- a/apps/collection/serializers/common.py +++ b/apps/collection/serializers/common.py @@ -8,12 +8,10 @@ class CollectionSerializer(serializers.ModelSerializer): class Meta: model = models.Collection fields = [ + 'id', 'name', - 'start', - 'end', - 'filters', - 'selectors', - 'targets', + 'block_size', + 'image' ]