在Djang的queryset中总结一个字段

2024-10-01 09:31:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在模型.py在

class QaCommission(models.Model):
    user = models.ForeignKey(PlUser, on_delete=models.CASCADE, blank=True, null=True, related_name='user_commission')
    ref = models.ForeignKey(PlUser, on_delete=models.CASCADE, blank=True, null=True, related_name='ref_commission')
    price = models.FloatField(blank=True, null=True)
    pct = models.FloatField(blank=True, null=True)
    commission = models.FloatField(blank=True, null=True)
    status = models.IntegerField(blank=True, null=True, default=0)

在序列化程序.py在

^{pr2}$

在视图.py在

class QaCommissionList(viewsets.ModelViewSet):
    queryset = QaCommission.objects.all()
    serializer_class = QaCommissionSerializer

如果在此视图中过滤ref=60,结果如下所示:

{
"count": 18,
"next": "http://127.0.0.1:8008/api/qacommission/?ref=60&page=2",
"previous": null,
"results": [
    {
        "id": 1,
        "price": 20.0,
        "pct": 0.1,
        "commission": 2.0,
        "status": 1,
        "user": 7,
        "ref": 60
    },
    {
        "id": 2,
        "price": 10.0,
        "pct": 0.1,
        "commission": 1.0,
        "status": 1,
        "user": 7,
        "ref": 60
    },
    ......
    ......
    ......
    {
        "id": 10,
        "price": 15.0,
        "pct": 0.1,
        "commission": 1.5,
        "status": 1,
        "user": 7,
        "ref": 60
    }
]
}

我想将结果中所有的“佣金”字段加起来,并将总和附加到原始查询集(可能在“count”旁边):18,如上所示,有18个佣金需要计数。在

我如何实现这一点?需要帮助,谢谢!在


Tags: pyrefidtruemodelsstatusnullprice
1条回答
网友
1楼 · 发布于 2024-10-01 09:31:23

尝试将ModelViewsetlist()方法重写为

class QaCommissionList(viewsets.ModelViewSet):
    queryset = QaCommission.objects.all()
    serializer_class = QaCommissionSerializer

    def list(self, request, *args, **kwargs):
        response = super().list(request, *args, **kwargs)
        response.data['sum'] = sum([data.get('commission', 0) for data in response.data['results']])
        return response

这个答案总结了来自特定页面的commision并显示了它

更新

^{pr2}$

abouve的答案将返回commission列的全部和(不考虑分页)

感谢你提到这样一个有效的观点

相关问题 更多 >