From 7596652a3f3d5944fec5528baa991e836f58fd95 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 3 Dec 2019 19:31:05 +0300 Subject: [PATCH 1/3] category tag tags filter by obj type --- apps/tag/serializers.py | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/apps/tag/serializers.py b/apps/tag/serializers.py index 2cc818a9..5b6f390c 100644 --- a/apps/tag/serializers.py +++ b/apps/tag/serializers.py @@ -1,9 +1,12 @@ """Tag serializers.""" from rest_framework import serializers +from rest_framework.fields import SerializerMethodField + from establishment.models import (Establishment, EstablishmentType, EstablishmentSubType) from news.models import News, NewsType from tag import models +from tag.models import Tag from utils.exceptions import (ObjectAlreadyAdded, BindingObjectNotFound, RemovedBindingObjectNotFound) from utils.serializers import TranslatedField @@ -12,6 +15,9 @@ from utils.serializers import TranslatedField class TagBaseSerializer(serializers.ModelSerializer): """Serializer for model Tag.""" + def get_extra_kwargs(self): + return super().get_extra_kwargs() + label_translated = TranslatedField() index_name = serializers.CharField(source='value', read_only=True, allow_null=True) @@ -37,6 +43,7 @@ class TagBackOfficeSerializer(TagBaseSerializer): 'category' ) + class TagCategoryProductSerializer(serializers.ModelSerializer): """SHORT Serializer for TagCategory""" @@ -57,7 +64,7 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer): """Serializer for model TagCategory.""" label_translated = TranslatedField() - tags = TagBaseSerializer(many=True, read_only=True) + tags = SerializerMethodField() class Meta: """Meta class.""" @@ -70,6 +77,22 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer): 'tags', ) + def get_tags(self, obj): + query_params = dict(self.context['request'].query_params) + if len(query_params) > 1: + return None + + tags = Tag.objects.all() + + if 'establishment_type' in query_params: + types = query_params['establishment_type'] + tags = tags.filter(establishments__establishment_type__index_name__in=types).distinct() + elif 'product_type' in query_params: + types = query_params['product_type'] + tags = tags.filter(products__product_type__index_name__in=types).distinct() + + return TagBaseSerializer(instance=tags, many=True, read_only=True).data + class TagCategoryShortSerializer(serializers.ModelSerializer): """Serializer for model TagCategory.""" @@ -174,15 +197,15 @@ class TagCategoryBindObjectSerializer(serializers.Serializer): attrs['tag_category'] = tag_category if obj_type == self.ESTABLISHMENT_TYPE: - establishment_type = EstablishmentType.objects.filter(pk=obj_id).\ + establishment_type = EstablishmentType.objects.filter(pk=obj_id). \ first() if not establishment_type: raise BindingObjectNotFound() - if request.method == 'POST' and tag_category.establishment_types.\ + if request.method == 'POST' and tag_category.establishment_types. \ filter(pk=establishment_type.pk).exists(): raise ObjectAlreadyAdded() - if request.method == 'DELETE' and not tag_category.\ - establishment_types.filter(pk=establishment_type.pk).\ + if request.method == 'DELETE' and not tag_category. \ + establishment_types.filter(pk=establishment_type.pk). \ exists(): raise RemovedBindingObjectNotFound() attrs['related_object'] = establishment_type @@ -190,10 +213,10 @@ class TagCategoryBindObjectSerializer(serializers.Serializer): news_type = NewsType.objects.filter(pk=obj_id).first() if not news_type: raise BindingObjectNotFound() - if request.method == 'POST' and tag_category.news_types.\ + if request.method == 'POST' and tag_category.news_types. \ filter(pk=news_type.pk).exists(): raise ObjectAlreadyAdded() - if request.method == 'DELETE' and not tag_category.news_types.\ + if request.method == 'DELETE' and not tag_category.news_types. \ filter(pk=news_type.pk).exists(): raise RemovedBindingObjectNotFound() attrs['related_object'] = news_type From 7590a73c5de31145658c6c114a8bce8ab91ad2b7 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 4 Dec 2019 09:23:21 +0300 Subject: [PATCH 2/3] tags fix mtm --- apps/tag/models.py | 2 +- apps/tag/serializers.py | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/apps/tag/models.py b/apps/tag/models.py index 12517815..b718d83c 100644 --- a/apps/tag/models.py +++ b/apps/tag/models.py @@ -47,7 +47,7 @@ class Tag(TranslatedFieldsMixin, models.Model): old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) old_id_meta_product = models.PositiveIntegerField(_('old id metadata product'), - blank=True, null=True, default=None) + blank=True, null=True, default=None) objects = TagQuerySet.as_manager() diff --git a/apps/tag/serializers.py b/apps/tag/serializers.py index 5b6f390c..eb73291f 100644 --- a/apps/tag/serializers.py +++ b/apps/tag/serializers.py @@ -2,11 +2,9 @@ from rest_framework import serializers from rest_framework.fields import SerializerMethodField -from establishment.models import (Establishment, EstablishmentType, - EstablishmentSubType) +from establishment.models import (Establishment, EstablishmentType) from news.models import News, NewsType from tag import models -from tag.models import Tag from utils.exceptions import (ObjectAlreadyAdded, BindingObjectNotFound, RemovedBindingObjectNotFound) from utils.serializers import TranslatedField @@ -79,18 +77,21 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer): def get_tags(self, obj): query_params = dict(self.context['request'].query_params) + if len(query_params) > 1: - return None - - tags = Tag.objects.all() + return [] + params = {} if 'establishment_type' in query_params: - types = query_params['establishment_type'] - tags = tags.filter(establishments__establishment_type__index_name__in=types).distinct() + params = { + 'establishments__isnull': False, + } elif 'product_type' in query_params: - types = query_params['product_type'] - tags = tags.filter(products__product_type__index_name__in=types).distinct() + params = { + 'products__isnull': False, + } + tags = obj.tags.filter(**params).distinct() return TagBaseSerializer(instance=tags, many=True, read_only=True).data From 4d36fc0f0cf6b953324f9ff12181cd5c7f51d005 Mon Sep 17 00:00:00 2001 From: Dmitriy Kuzmenko Date: Wed, 4 Dec 2019 12:38:07 +0300 Subject: [PATCH 3/3] fix fabric --- fabfile.py | 2 +- make_data_migration.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fabfile.py b/fabfile.py index e8a52f85..f9896200 100644 --- a/fabfile.py +++ b/fabfile.py @@ -54,7 +54,7 @@ def collectstatic(): def deploy(branch=None): role = env.roles[0] - if env.roledefs[role]['branch'] != 'develop': + if env.roledefs[role]['branch'] == 'develop': fetch() install_requirements() migrate() diff --git a/make_data_migration.sh b/make_data_migration.sh index c92f74e7..bed1afb7 100755 --- a/make_data_migration.sh +++ b/make_data_migration.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash ./manage.py transfer -a -#./manage.py transfer -d +./manage.py transfer -d ./manage.py transfer -e ./manage.py transfer --fill_city_gallery ./manage.py transfer -l