category tag tags filter by obj type
This commit is contained in:
parent
848008cae1
commit
7596652a3f
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user