category tag tags filter by obj type

This commit is contained in:
alex 2019-12-03 19:31:05 +03:00
parent 848008cae1
commit 7596652a3f

View File

@ -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."""