Могу ли я сделать пользовательскую сложную группу в Django QuerySet? - PullRequest
3 голосов
/ 18 января 2011

Мне нужно сделать сумму определенного столбца, сгруппированного по дате и месяцу.В SQL (postgres) это будет выглядеть примерно так:

select sum(amount) from somewhere group by extract(year from date), extract(month from date)

Может ли это быть выражено как Django QuerySet?Мне кажется, что это не может, но я действительно не хочу прибегать к простому старому SQL.Любые другие идеи приветствуются.

Похоже, что это возможно при использовании queryset.query.group_by, но мне не повезло - рабочий пример приветствуется.

Ответы [ 2 ]

9 голосов
/ 18 января 2011

Вы можете использовать метод extra для добавления значений года и даты перед агрегацией.

Somewhere.objects.extra(select={'year': 'EXTRACT(year FROM date)',
                                'month': 'EXTRACT(month FROM date)'}
                       ).values_list('year', 'month').annotate(Sum('amount'))
1 голос
/ 18 января 2011
...