Вопрос:

Django ORM, сумма нескольких столбцов

django django-orm django-aggregation

2520 просмотра

2 ответа

50 Репутация автора

У меня есть вопрос о том, как мы можем фильтровать по сумме нескольких столбцов.

Пример:

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

И мне нужно отфильтровать объекты, где SUM из 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

Благодарю.

Автор: wowbrowser search Источник Размещён: 10.04.2017 12:53

Ответы (2)


4 плюса

1158 Репутация автора

Решение

Вы можете использовать F () и с аннотацией :

Foo.objects.annotate(i_sum=F('i1') + F('i2')+ F('i3')).filter(i_sum=200)
Автор: Wilfried Размещён: 10.04.2017 01:04

0 плюса

14765 Репутация автора

Вы можете использовать extra

Foo.objects.extra(where=["i1 + i2 + i3 > 200"])
Автор: itzMEonTV Размещён: 10.04.2017 01:10
Вопросы из категории :
32x32