Django ORM,多列的总和

时间:2017-04-10 12:53:50

标签: django django-orm django-aggregation

我对如何使用多列的SUM进行过滤有疑问。

示例:

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

我需要过滤i1,i2,i3的SUM小于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

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用F()with annotation

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

答案 1 :(得分:0)

您可以使用extra

Foo.objects.extra(where=["i1 + i2 + i3 > 200"])