假设我有一个模型
class Testmodel():
amount = models.IntegerField(null=True)
contact = models.CharField()
现在我正在进行如下查询:
obj1 = Testmodel.objects.filter(contact = 123)
并假设它在任何情况下都返回 n
个数字对象,例如 (obj1,obj2,obj3 ...)
那么,如果我想从所有返回对象 (obj1,obj2,obj3 ...)
中求出 amount
的总和,那么如何最好地做到这一点方式。
任何帮助将不胜感激。
最佳答案
在数据库级别执行此操作通常比在 Python 中更好。我们可以使用 .aggregate(..)
来实现:
from django.db.models import Sum
Testmodel.objects.filter(contact=123)<b>.aggregate(total=Sum('amount'))['total']</b>
.aggregate(total=Sum('amount'))
将返回一个包含单个键值对的字典:'total'
将与行的金额
总和。如果没有选择任何行(即过滤器不匹配任何内容),则它将 None
与键关联。
鉴于数据库支持对值求和(大多数数据库都支持),您可以构造一个类似于以下内容的查询:
SELECT SUM(amount) AS total
FROM app_testmodel
WHERE contact = 123
关于python - 如何为 n 个对象中的字段求和创建迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48167565/