Home api lari chiqarildi
This commit is contained in:
1
core/apps/api/serializers/ad/__init__.py
Normal file
1
core/apps/api/serializers/ad/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from .home_api import * # noqa
|
||||
59
core/apps/api/serializers/ad/home_api.py
Normal file
59
core/apps/api/serializers/ad/home_api.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from rest_framework import serializers
|
||||
from django.db.models import Avg
|
||||
from core.apps.api.models import AdModel, AdVariant
|
||||
|
||||
|
||||
class AdVariantSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = AdVariant
|
||||
fields = [
|
||||
"variant",
|
||||
"value",
|
||||
"is_available",
|
||||
"price",
|
||||
"discount",
|
||||
]
|
||||
|
||||
|
||||
class BaseHomeAdSerializer(serializers.ModelSerializer):
|
||||
variants = serializers.SerializerMethodField()
|
||||
star = serializers.SerializerMethodField()
|
||||
comment_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = AdModel
|
||||
fields = [
|
||||
"id",
|
||||
"name",
|
||||
"price",
|
||||
"image",
|
||||
"star",
|
||||
"comment_count",
|
||||
"variants",
|
||||
]
|
||||
|
||||
def get_variants(self, obj):
|
||||
variant = obj.variants.order_by("price").first()
|
||||
if variant:
|
||||
return AdVariantSerializer(variant).data
|
||||
return []
|
||||
|
||||
def get_star(self, obj):
|
||||
avg = obj.feedback.aggregate(avg=Avg("star"))["avg"]
|
||||
return avg or 0
|
||||
|
||||
def get_comment_count(self, obj):
|
||||
count = obj.feedback.count()
|
||||
return count or 0
|
||||
|
||||
|
||||
class ListHomeAdSerializer(BaseHomeAdSerializer):
|
||||
class Meta(BaseHomeAdSerializer.Meta): ...
|
||||
|
||||
|
||||
class RetrieveHomeAdSerializer(BaseHomeAdSerializer):
|
||||
class Meta(BaseHomeAdSerializer.Meta): ...
|
||||
|
||||
|
||||
class CreateHomeAdSerializer(BaseHomeAdSerializer):
|
||||
class Meta(BaseHomeAdSerializer.Meta): ...
|
||||
Reference in New Issue
Block a user