From 93a005bfd4031805b02993cd10d0f260521203c8 Mon Sep 17 00:00:00 2001 From: muhammadvadud Date: Wed, 26 Nov 2025 11:23:08 +0500 Subject: [PATCH 1/2] Home api lari o'zgartirish kiritildi --- core/apps/api/serializers/ad/home_api.py | 25 +++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/core/apps/api/serializers/ad/home_api.py b/core/apps/api/serializers/ad/home_api.py index 67f7ba3..d385901 100644 --- a/core/apps/api/serializers/ad/home_api.py +++ b/core/apps/api/serializers/ad/home_api.py @@ -16,9 +16,10 @@ class AdVariantSerializer(serializers.ModelSerializer): class BaseHomeAdSerializer(serializers.ModelSerializer): - variants = serializers.SerializerMethodField() star = serializers.SerializerMethodField() comment_count = serializers.SerializerMethodField() + original_price = serializers.SerializerMethodField() + discount = serializers.SerializerMethodField() class Meta: model = AdModel @@ -29,14 +30,24 @@ class BaseHomeAdSerializer(serializers.ModelSerializer): "image", "star", "comment_count", - "variants", + "original_price", + "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_original_price(self, obj): + variant = self._get_first_variant(obj) + 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"] From 6c24770e9318cda1665a54de2ee2ebf68dc51eef Mon Sep 17 00:00:00 2001 From: muhammadvadud Date: Wed, 26 Nov 2025 11:38:56 +0500 Subject: [PATCH 2/2] Fix typo --- core/apps/api/serializers/ad/home_api.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/apps/api/serializers/ad/home_api.py b/core/apps/api/serializers/ad/home_api.py index d385901..d709984 100644 --- a/core/apps/api/serializers/ad/home_api.py +++ b/core/apps/api/serializers/ad/home_api.py @@ -18,7 +18,7 @@ class AdVariantSerializer(serializers.ModelSerializer): class BaseHomeAdSerializer(serializers.ModelSerializer): star = serializers.SerializerMethodField() comment_count = serializers.SerializerMethodField() - original_price = serializers.SerializerMethodField() + price = serializers.SerializerMethodField() discount = serializers.SerializerMethodField() class Meta: @@ -30,7 +30,6 @@ class BaseHomeAdSerializer(serializers.ModelSerializer): "image", "star", "comment_count", - "original_price", "discount", ] @@ -41,8 +40,10 @@ class BaseHomeAdSerializer(serializers.ModelSerializer): self._variant_cache[obj.id] = obj.variants.order_by("price").first() return self._variant_cache[obj.id] - def get_original_price(self, obj): + 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):