Любой способ группировать агрегаты в Django?

Cory Madden спросил: 03 февраля 2018 в 12:17 в: python

В настоящее время мы используем Django 1.8 и Postgres.

У меня есть агрегация, которую я хочу выполнить, но я хочу, чтобы группировки группировались по месяцам. Это тривиально делать в SQL, но я не могу понять, как это сделать с помощью ORM Django.

Вот пример SQL-запроса, который я выполняю, который предоставляет желаемый Результаты (SQL Fiddle):

SELECT 
    EXTRACT(month from date) as month,
    EXTRACT(year from date) as year,
    SUM(total) as total
FROM transaction
GROUP BY year, month ORDER BY year, month;

И вот пример моего перевода в Django (этот использует класс Month из этот ответ , но я пробовал несколько вариантов):

results = Transactions.all().annotate(month=Month('date')).aggregate(total=Sum('total', output_field=DecimalField()))

Здесь есть несколько дополнительных агрегаций, но я удалил их для ясности. Мне все равно, что результат Django будет выглядеть так, пока он сгруппирован по месяцам.

0 ответов