59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
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): ...
|