2016-08-31 1 views
0

Например, некоторые модели:Как агрегировать QuerySet на основе свойства модели?

class Foo(models.Model): 
    a = models.FloatField() 
    b = models.FloatField() 

    @property 
    def c(self): 
     return self.a/self.b 

И мы хотим найти минимальное значение в QuerySet:

bar = Foo.objects.aggregate(Min('c')) 

Но это не работает, потому что c не в базе данных и не может быть извлечена из дб. Как получить минимальное значение c от Foo?

ответ

2

Вы должны сделать логику внутри самого запроса, а не как свойство, которое оценивается в Python. Что-то вроде этого должно работать:

from django.db.models import F, Min 

bar = Foo.objects.annotate(c=F('a')/F('b')).aggregate(Min('c')) 

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

  • Нет связанных вопросов^_^