5

我有一个关于我们如何按多列的 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

谢谢。

4

2 回答 2

11

您可以使用F()注释

Foo.objects.annotate(i_sum=F('i1') + F('i2')+ F('i3')).filter(i_sum=200)
于 2017-04-10T13:04:55.210 回答
0

您可以使用extra

Foo.objects.extra(where=["i1 + i2 + i3 > 200"])
于 2017-04-10T13:10:20.647 回答