update
This commit is contained in:
58
core/apps/api/serializers/search/ad.py
Normal file
58
core/apps/api/serializers/search/ad.py
Normal file
@@ -0,0 +1,58 @@
|
||||
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): ...
|
||||
Reference in New Issue
Block a user