2015-07-07 2 views
0

Я wounder, я могу преобразовать этот SQL:Джанго агрегат мин/макс с другими полями

SELECT MIN(price) min_price, * FROM table GROUP BY YEAR(date), MONTH(date); 

с Django ORM? Мне нужен один объект из каждого месяца с минимальной ценой. Так что я попытался использовать агрегат():

Model.objects.filter(*filtering*).aggregate(Min('price')) 

но потерял другие поля, показывает только «цена» Пробовал, размещать поля я необходимые:

Model.objects.values(*some fields*).filter(*filtering*).aggregate(Min('price')) 

Но после этого я не получил любое поле ! Даже цена. Мне нужен объект с минимальной ценой и другими полями

ответ

-1

Вы пытались использовать .order_by()?

Например:

YourModel.objects.all().order_by(min_price)[:1] 

Если вы хотите, чтобы получить значения вашей модели полей вы можете получить к ним доступ с помощью тегов шаблонов, как этот {{ YourModel.yourModelField }}

И если вы хотите получить доступ к ним вне шаблонов вы должны сделать это как

mymodel = YourModel.objects.all().order_by(min_price)[:1] 
print(mymodel.yourModelField) 

печати() является примером

конечно
+0

Спасибо за ответ, но это не то, что мне нужно. Мне нужна одна строка в каждом месяце с минимальной ценой. Ваш пример даст мне только одну строку ... Вы предлагаете мне «SELECT * FROM table ORDER BY min_price LIMIT 1;» Но мне нужно: «SELECT MIN (цена) min_price, * FROM table GROUP BY YEAR (дата), MONTH (дата); В результате я должен увидеть много строк, но одну строку в месяц с минимальной ценой в этом месяце – user2919162

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