category tag tags filter by obj type
This commit is contained in:
parent
848008cae1
commit
7596652a3f
|
|
@ -1,9 +1,12 @@
|
||||||
"""Tag serializers."""
|
"""Tag serializers."""
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from rest_framework.fields import SerializerMethodField
|
||||||
|
|
||||||
from establishment.models import (Establishment, EstablishmentType,
|
from establishment.models import (Establishment, EstablishmentType,
|
||||||
EstablishmentSubType)
|
EstablishmentSubType)
|
||||||
from news.models import News, NewsType
|
from news.models import News, NewsType
|
||||||
from tag import models
|
from tag import models
|
||||||
|
from tag.models import Tag
|
||||||
from utils.exceptions import (ObjectAlreadyAdded, BindingObjectNotFound,
|
from utils.exceptions import (ObjectAlreadyAdded, BindingObjectNotFound,
|
||||||
RemovedBindingObjectNotFound)
|
RemovedBindingObjectNotFound)
|
||||||
from utils.serializers import TranslatedField
|
from utils.serializers import TranslatedField
|
||||||
|
|
@ -12,6 +15,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 +43,7 @@ class TagBackOfficeSerializer(TagBaseSerializer):
|
||||||
'category'
|
'category'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TagCategoryProductSerializer(serializers.ModelSerializer):
|
class TagCategoryProductSerializer(serializers.ModelSerializer):
|
||||||
"""SHORT Serializer for TagCategory"""
|
"""SHORT Serializer for TagCategory"""
|
||||||
|
|
||||||
|
|
@ -57,7 +64,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 +77,22 @@ 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 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):
|
class TagCategoryShortSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for model TagCategory."""
|
"""Serializer for model TagCategory."""
|
||||||
|
|
@ -174,15 +197,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 +213,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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user