python - 如何为 n 个对象中的字段求和创建迭代器

标签 python django

假设我有一个模型

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/

相关文章:

python - NSTextView 突出显示不触发

html - 使用先前表单中的变量更新 HTML 表单

javascript - Django 中的通用进度条

在 Matlab 中转置的 Python 创建的 HDF5 数据集

python - 仅当有一个行具有空值时,才向前填充数据框中的一列

尽管升级到 Python 2.7,Python 仍使用 TLSv1 或 TLSv1.1 请求库

django 表单给出 : Select a valid choice. 该选项不是可用选项之一

python - 这两种覆盖 Django ModelForm 中的 save() 方法的方法有什么区别?

由于自动完成小部件字段,Django 表单不会提交

python - 在不运行函数的情况下获取python函数属性