Fix typo #6

Merged
admin merged 2 commits from feat/home_api into main 2025-11-26 06:49:59 +00:00

View File

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