2015-02-22 3 views
1

Мне нужно суммировать два поля в каждой записи, а затем, если эта сумма больше 0, выберите запись. Вот что модель выглядит следующим образом:Как я могу использовать предложение where с суммой двух полей

class Location(models.Model): 
     day1 = models.IntegerField(default=0) 
     day2 = models.IntegerField(default=0) 
     day3 = models.IntegerField(default=0) 
     day4 = models.IntegerField(default=0) 
     day5 = models.IntegerField(default=0) 
     day6 = models.IntegerField(default=0) 
     day7 = models.IntegerField(default=0) 

и это запрос я построил

Location.objects.extra(select={'fieldsum': 'day1 + day2+ day3+ day4+ day5+ day6+ day7'},where=['fieldsum > 0']) 

но выдает ошибку, говоря

django.db.utils.ProgrammingError: column "fieldsum" does not exist 
+1

В Джанго 1.8 можно будет использовать F() в аннотировать, так 'Model.objects.annotate (сумма = F (» day1 ') + F (' day2 ') + ... + F (' day5 ')). Фильтр (sum__gt = 0) 'будет возможен. – GwynBleidD

+1

Кроме того, чтобы дать вам более высокий уровень ответа, в общем случае для SQL вы добавили бы условие к агрегатной функции в предложение «HAVING», а не в предложение «WHERE». –

ответ

3

Вам не нужно добавить дополнительное поле , просто используйте F() Django built-in function и преобразовайте

day1 + day2+ day3+ day4+ day5+ day6+ day7 > 0 до day1 > 0 - day2 - day3 - day4 - day5 - day6 - day7

Затем, ваш запрос должен выглядеть следующим образом:

Location.objects.filter(day1__gt = 0 - F('day2') - F('day3') ..... -F('day7') ) 
+0

жаль, что я не включил все поля ... Я не уверен, как это сделать со всеми этими полями. Спасибо за быстрый ответ! – Tyler

+0

@TylerRice - это то же самое. проверьте мой обновленный ответ. – levi

+0

ok Я вижу, что вы там сделали, простую алгебру lol спасибо! – Tyler

Смежные вопросы