Compare commits

...

3 Commits

Author SHA1 Message Date
26128b6ac5 Merge pull request 'Fix typo' (#6) from feat/home_api into main
Reviewed-on: #6
2025-11-26 06:49:58 +00:00
6c24770e93 Fix typo 2025-11-26 11:38:56 +05:00
93a005bfd4 Home api lari o'zgartirish kiritildi 2025-11-26 11:23:08 +05:00

View File

@@ -16,9 +16,10 @@ class AdVariantSerializer(serializers.ModelSerializer):
class BaseHomeAdSerializer(serializers.ModelSerializer):
variants = serializers.SerializerMethodField()
star = serializers.SerializerMethodField()
comment_count = serializers.SerializerMethodField()
price = serializers.SerializerMethodField()
discount = serializers.SerializerMethodField()
class Meta:
model = AdModel
@@ -29,14 +30,25 @@ class BaseHomeAdSerializer(serializers.ModelSerializer):
"image",
"star",
"comment_count",
"variants",
"discount",
]
def get_variants(self, obj):
variant = obj.variants.order_by("price").first()
if variant:
return AdVariantSerializer(variant).data
return []
def _get_first_variant(self, obj):
if not hasattr(self, "_variant_cache"):
self._variant_cache = {}
if obj.id not in self._variant_cache:
self._variant_cache[obj.id] = obj.variants.order_by("price").first()
return self._variant_cache[obj.id]
def get_price(self, obj):
variant = self._get_first_variant(obj)
if not variant:
return obj.price
return variant.price if variant else 0
def get_discount(self, obj):
variant = self._get_first_variant(obj)
return variant.discount if variant else 0
def get_star(self, obj):
avg = obj.feedback.aggregate(avg=Avg("star"))["avg"]