Compare commits
3 Commits
23f6e6e72a
...
26128b6ac5
| Author | SHA1 | Date | |
|---|---|---|---|
| 26128b6ac5 | |||
| 6c24770e93 | |||
| 93a005bfd4 |
@@ -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"]
|
||||||
|
|||||||
Reference in New Issue
Block a user