如何制作迭代器,用于从n个对象中做一个字段的总和



假设我有一个模型

class Testmodel():
   amount = models.IntegerField(null=True)
   contact = models.CharField()

现在我正在做一个这样的查询:

obj1 = Testmodel.objects.filter(contact = 123)

并假设它在任何情况下返回n数字对象,例如(obj1,obj2,obj3 ...)

因此,如果我想从所有返回对象中得出amount的总和(obj1,obj2,obj3 ...)那么如何以最佳方式完成。任何帮助将不胜感激。

在数据库级别执行此操作通常比在 Python 中更好。我们可以为此使用.aggregate(..)

from django.db.models import Sum
Testmodel.objects.filter(contact=123).aggregate(total=Sum('amount'))['total']

.aggregate(total=Sum('amount'))将返回一个包含单个键值对的字典:'total'将与行amount的总和相关联。如果未选择任何行(即过滤器与任何内容不匹配(,则它将None与键相关联。

假设数据库支持

对值求和(大多数数据库都支持(,您可以构造类似于以下内容的查询:

SELECT SUM(amount) AS total
FROM app_testmodel
WHERE contact = 123

使用聚合

from django.db.models import Sum
Testmodel.objects.filter(contact=123).aggregate(
        total_sum=Sum('amount')
)

最新更新