Django ORM,多列之和

Django ORM, sum of multiple columns

我对如何按多列的 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

谢谢。

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

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

您可以使用extra

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