Merge branch 'tags_filter' into develop

This commit is contained in:
Dmitriy Kuzmenko 2019-12-04 12:46:17 +03:00
commit 9f5a1f9ce5
4 changed files with 36 additions and 12 deletions

View File

@ -47,7 +47,7 @@ class Tag(TranslatedFieldsMixin, models.Model):
old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None)
old_id_meta_product = models.PositiveIntegerField(_('old id metadata product'), 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() objects = TagQuerySet.as_manager()

View File

@ -1,7 +1,8 @@
"""Tag serializers.""" """Tag serializers."""
from rest_framework import serializers from rest_framework import serializers
from establishment.models import (Establishment, EstablishmentType, from rest_framework.fields import SerializerMethodField
EstablishmentSubType)
from establishment.models import (Establishment, EstablishmentType)
from news.models import News, NewsType from news.models import News, NewsType
from tag import models from tag import models
from utils.exceptions import (ObjectAlreadyAdded, BindingObjectNotFound, from utils.exceptions import (ObjectAlreadyAdded, BindingObjectNotFound,
@ -12,6 +13,9 @@ from utils.serializers import TranslatedField
class TagBaseSerializer(serializers.ModelSerializer): class TagBaseSerializer(serializers.ModelSerializer):
"""Serializer for model Tag.""" """Serializer for model Tag."""
def get_extra_kwargs(self):
return super().get_extra_kwargs()
label_translated = TranslatedField() label_translated = TranslatedField()
index_name = serializers.CharField(source='value', read_only=True, allow_null=True) index_name = serializers.CharField(source='value', read_only=True, allow_null=True)
@ -37,6 +41,7 @@ class TagBackOfficeSerializer(TagBaseSerializer):
'category' 'category'
) )
class TagCategoryProductSerializer(serializers.ModelSerializer): class TagCategoryProductSerializer(serializers.ModelSerializer):
"""SHORT Serializer for TagCategory""" """SHORT Serializer for TagCategory"""
@ -57,7 +62,7 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer):
"""Serializer for model TagCategory.""" """Serializer for model TagCategory."""
label_translated = TranslatedField() label_translated = TranslatedField()
tags = TagBaseSerializer(many=True, read_only=True) tags = SerializerMethodField()
class Meta: class Meta:
"""Meta class.""" """Meta class."""
@ -70,6 +75,25 @@ class TagCategoryBaseSerializer(serializers.ModelSerializer):
'tags', 'tags',
) )
def get_tags(self, obj):
query_params = dict(self.context['request'].query_params)
if len(query_params) > 1:
return []
params = {}
if 'establishment_type' in query_params:
params = {
'establishments__isnull': False,
}
elif 'product_type' in query_params:
params = {
'products__isnull': False,
}
tags = obj.tags.filter(**params).distinct()
return TagBaseSerializer(instance=tags, many=True, read_only=True).data
class TagCategoryShortSerializer(serializers.ModelSerializer): class TagCategoryShortSerializer(serializers.ModelSerializer):
"""Serializer for model TagCategory.""" """Serializer for model TagCategory."""
@ -174,15 +198,15 @@ class TagCategoryBindObjectSerializer(serializers.Serializer):
attrs['tag_category'] = tag_category attrs['tag_category'] = tag_category
if obj_type == self.ESTABLISHMENT_TYPE: if obj_type == self.ESTABLISHMENT_TYPE:
establishment_type = EstablishmentType.objects.filter(pk=obj_id).\ establishment_type = EstablishmentType.objects.filter(pk=obj_id). \
first() first()
if not establishment_type: if not establishment_type:
raise BindingObjectNotFound() 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(): filter(pk=establishment_type.pk).exists():
raise ObjectAlreadyAdded() raise ObjectAlreadyAdded()
if request.method == 'DELETE' and not tag_category.\ if request.method == 'DELETE' and not tag_category. \
establishment_types.filter(pk=establishment_type.pk).\ establishment_types.filter(pk=establishment_type.pk). \
exists(): exists():
raise RemovedBindingObjectNotFound() raise RemovedBindingObjectNotFound()
attrs['related_object'] = establishment_type attrs['related_object'] = establishment_type
@ -190,10 +214,10 @@ class TagCategoryBindObjectSerializer(serializers.Serializer):
news_type = NewsType.objects.filter(pk=obj_id).first() news_type = NewsType.objects.filter(pk=obj_id).first()
if not news_type: if not news_type:
raise BindingObjectNotFound() 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(): filter(pk=news_type.pk).exists():
raise ObjectAlreadyAdded() 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(): filter(pk=news_type.pk).exists():
raise RemovedBindingObjectNotFound() raise RemovedBindingObjectNotFound()
attrs['related_object'] = news_type attrs['related_object'] = news_type

2
fabfile.py vendored
View File

@ -54,7 +54,7 @@ def collectstatic():
def deploy(branch=None): def deploy(branch=None):
role = env.roles[0] role = env.roles[0]
if env.roledefs[role]['branch'] != 'develop': if env.roledefs[role]['branch'] == 'develop':
fetch() fetch()
install_requirements() install_requirements()
migrate() migrate()

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
./manage.py transfer -a ./manage.py transfer -a
#./manage.py transfer -d ./manage.py transfer -d
./manage.py transfer -e ./manage.py transfer -e
./manage.py transfer --fill_city_gallery ./manage.py transfer --fill_city_gallery
./manage.py transfer -l ./manage.py transfer -l