假设我有一个模型
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')
)