from rest_framework import serializers from core.apps.api.models import AdModel class BaseSearchAdsSerializer(serializers.ModelSerializer): category = serializers.SerializerMethodField() class Meta: model = AdModel fields = [ "id", "name", "image", "category" ] def get_category(self, obj): request = self.context.get("request") lang = request.headers.get("Accept-Language", "uz") lang = lang.split(",")[0].split("-")[0] if lang not in ["uz", "ru", "en"]: lang = "uz" category = obj.category if not category: return None chain = [] current = category while current: chain.append(current) current = current.parent chain = list(reversed(chain)) result = None for cat in reversed(chain): result = { "id": cat.id, "name": getattr(cat, f"name_{lang}"), "children": result } return result class ListSearchAdsSerializer(BaseSearchAdsSerializer): class Meta(BaseSearchAdsSerializer.Meta): ... class RetrieveSearchAdsSerializer(BaseSearchAdsSerializer): class Meta(BaseSearchAdsSerializer.Meta): ... class CreateSearchAdsSerializer(BaseSearchAdsSerializer): class Meta(BaseSearchAdsSerializer.Meta): ...