Django ORM,多列的总和

标签 django django-orm django-aggregation

我有一个关于如何按多列的 SUM 过滤的问题。

例子:

class Foo(models.Model):
    i1 = models.IntegerField()
    i2 = models.IntegerField()
    i3 = models.IntegerField()

我需要过滤 i1、i2、i3 的总和小于 200 的对象。
我试过用以下方法实现它:
Foo.objects.agregate(i_sum=Sum(i1,i2,i3)).filter(i_sum__lt=200) # error
Foo.objects.agregate(i_sum=Sum([i1,i2,i3])).filter(i_sum__lt=200) # error

谢谢。

最佳答案

您可以使用 F() , 和 with annotation :

Foo.objects.annotate(i_sum=F('i1') + F('i2')+ F('i3')).filter(i_sum=200)

关于Django ORM,多列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43323724/

相关文章:

python - 选择要在 Django 中使用的正确设置文件

python - 通过计算在 django 中批量更新

django - 在 Django QuerySet 中,如何在多对一关系中过滤 "not exists"

python - 使用子查询注释计数

Django order_by() 过滤器与 distinct()

python - Django 4.04 中具有区域设置感知功能的正确工作千位分隔符

python - Django self join ,如何将此查询转换为ORM查询

python - django 聊天机器人网站中从 Sqlite3 到 Mysql

python - 在 Django ORM 中旋转数据和复杂注释

django - 在 Django 模型的属性中使用聚合