从序列化程序中的多对多字段获取聚合值

杰里米

我们有一个生成响应的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django Rest Framework 序列化程序检查相关多对多字段中是否存在

如何在 Django REST Framework 序列化程序中检索具有向后关系查找的多对多字段?

Django Rest框架序列化多对多字段

序列化多对多字段时遇到问题

Django rest框架序列化多对多字段

DRF 序列化 - 多对多字段通过

在序列化器中创建具有多对多字段的模型的问题

如何使用模型序列化程序将不同的多对多字段添加到 django-rest-framework 中的单个实例或外键行中

如何从子序列化程序中获取特定字段?

获取序列化程序django中的外键字段

如何在序列化器中获取序列化器字段值

REST中的多对多字段和嵌套序列化器:覆盖嵌套序列化器不会在Django中创建嵌套对象

Django Rest Framework序列化程序中的聚合(和其他带注释的)字段

如何在 Django REST Framework 序列化程序中获取相关字段的相关字段?

需要帮助了解序列化器中的许多字段和源字段

尝试在序列化程序UserViewSerializer上获取字段email的值时出现AttributeError

尝试获取序列化程序上字段“名称”的值时出现 AttributeError

尝试在序列化程序UserSerializer上获取字段email的值时出现AttributeError

尝试获取序列化程序“LoginSerializer”上的字段“电子邮件”的值时出现 AttributeError

DRF Django:序列化程序:如何获取多对多关系中的其他属性列表

Django Rest Framework-在序列化程序中获取相关模型字段

Django Rest Framework-在序列化程序中获取相关模型字段

在序列化程序中获取字段的属性(Django Rest框架)

使用DjangoRestFramework序列化器获取字段值

在嵌套序列化程序的字段中访问序列化程序实例

Django REST Framework - 在序列化程序中獲取布爾字段的反轉值

Drf如何序列化许多字段

在api-view中获取序列化器字段值

尝试序列化多个关注者时出错:尝试获取序列化程序“UserSerializer”上的字段“email”的值时出现 AttributeError