2017-04-10 4 views
0

J'ai une question sur la façon dont nous pouvons filtrer par SUM de plusieurs colonnes.Django ORM, somme de plusieurs colonnes

Exemple:

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

Et je dois filtrer les objets où SUM de i1, i2, i3 est à moins de 200. J'ai essayé ACHIVE avec:

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 

Merci.

Répondre

2

Vous pouvez utiliser F() et with annotation:

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

grâce, il était vraiment évident. Sum est une sorte d'opération verticale mais j'avais besoin d'horizontal. –

+0

Content de t'aider – Wilfried

0

Vous pouvez utiliser extra

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