我们有一个生成响应的 API 端点。但是,我们希望聚合一些数据并向序列化程序添加一个额外的字段。
{
"id": 61,
"not_owned_value": # This is what we're trying to get (Aggregate best_buy_price from not_owned_inventory PlayerProfiles)
"not_owned_inventory": [ # PlayerProfile objects
"29666196ed6900f07fc4f4af4738bffe",
"0ff73ca20cd787c5b817aff62e7890da",
"99d4eaef9991695d7ad94b83ad5c5223",
"6fcabe9f9c8a95980923530e7d7353a7",
"80b34c84a6e5ed25df112c11de676adc",
"0a4c5b96474f0584519d1abc4364d5a2",
"9ed1f55ac4f3b402b1d08b26870c34a6",
]
}
这是models.py
class PlayerProfile(models.Model):
card_id = models.CharField(max_length=120, unique=True, primary_key=True)
name = models.CharField(max_length=120, null=True)
class PlayerListing(models.Model):
player_profile = models.OneToOneField(
PlayerProfile,
on_delete=models.CASCADE,
null=True)
best_buy_price = models.IntegerField(null=True)
class InventoryLiveCollection(models.Model):
not_owned_inventory = models.ManyToManyField(PlayerProfile, related_name="not_owned_inventory")
这是serializer.py
class InventoryLiveCollectionSerializer(serializers.ModelSerializer):
not_owned_inventory = PlayerProfileAndListingForNesting(read_only=True, many=True)
class Meta:
model = InventoryLiveCollection
fields = (
'id',
'date',
'not_owned_value', # Trying to get this
'not_owned_inventory',
)
如何聚合属于特定 InventoryLiveCollection__not_owned_inventory 的 player_profile 对象的 best_buy_price?
你可以试试这个。
from django.db.models import Sum
not_owned_value = serializers.SerializerMethodField()
def get_not_owned_value(self, obj):
value = obj.not_owned_inventory.all().aggregate(total=Sum('playerlisting__best_buy_price'))
return value['total']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句