Я бы хотел передать этот запрос из SQL в Django:

"select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;"

Часть, которая вызывает проблемы, - это группировка по месяцам при агрегировании. Я пробовал это (что казалось логичным), но это не сработало:

HourEntries.objects.order_by("date").values("date__month").aggregate(Sum("quantity"))
5
sebpiq 31 Май 2010 в 15:53

2 ответа

Лучший ответ

aggregate может генерировать только одно совокупное значение.

Вы можете получить общую сумму часов текущего месяца с помощью следующего запроса.

from datetime import datetime
this_month = datetime.now().month
HourEntries.objects.filter(date__month=this_month).aggregate(Sum("quantity"))

Итак, чтобы получить агрегированные значения HourEntry за все месяцы, вы можете перебрать набор запросов для всех месяцев в базе данных. Но лучше использовать необработанный sql.

HourEntries.objects.raw("select date_format(date, '%Y-%m') as month, sum(quantity) as hours from hourentries group by date_format(date, '%Y-%m') order by date;")
2
Lakshman Prasad 31 Май 2010 в 12:31

Я предполагаю, что вы не можете агрегировать "количество" после использования values("date__month"), так как это оставляет только "дату" и "месяц" в QuerySet.

0
Johannes Charra 31 Май 2010 в 12:32