假设我有一个模特
class Testmodel():
amount = models.IntegerField(null=True)
contact = models.CharField()
现在我正在进行如下查询:
obj1 = Testmodel.objects.filter(contact = 123)
并假设它在任何情况下返回n
个数字对象,如(obj1,obj2,obj3 ...)
所以,如果我想从所有返回的对象amount
中得到(obj1,obj2,obj3 ...)
的总和,那么如何以最好的方式做。
任何帮助将不胜感激。
答案 0 :(得分:3)
通常在数据库级别比在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
答案 1 :(得分:2)
from django.db.models import Sum
Testmodel.objects.filter(contact=123).aggregate(
total_sum=Sum('amount')
)