2017-04-10 10 views
0

複数の列のSUMでフィルタリングする方法について質問があります。Django ORM、複数の列の合計

例:

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

そして私はI1、I2の合計が、I3は、私はそれachive試してみた未満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

あなたがF()、およびwith annotationを使用することができます。

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

感謝を使用することができ、それは本当に明らかでした。 Sumは何らかの垂直操作ですが、私は水平が必要でした。 –

+0

お手伝いをしてうれしい – Wilfried

0

あなたはextra

Foo.objects.extra(where=["i1 + i2 + i3 > 200"]) 
関連する問題