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