2017-04-10 80 views
0

我有一個關於如何通過多列SUM進行篩選的問題。Django ORM,多列總和

例子:

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

,我需要過濾對象,其中I1,I2的SUM,I3是小於200 我試過achive它:

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

您可以使用F()with annotation

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

感謝,這是非常明顯的。總和是某種垂直操作,但我需要水平。 –

+0

很高興爲您效勞 – Wilfried

0

您可以使用extra

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