2012-03-30 1 views
1

Я искал, как можно группировать набор запросов django по месяцам. Я наконец-то нашел этот очень полезный кусок кода:Группировка по месяцам в Django и получение в виде datetime.date()

truncate_date = connection.ops.date_trunc_sql('day','timestamp') 
qs = qs.extra({'date':truncate_date}) 
return qs.values('date').annotate(Sum('amount')).order_by('date') 

из Django: Group by date (day, month, year)

Он работал хорошо, однако date Возвращается строка, а не собственно datetime.date и я не могу использовать {{date|date:format}} в шаблон. Кажется, у первоначального отправителя (Оли) была такая же проблема. Хотя парень, который отвечает, говорит, что работает с postgres, у меня не было никакого успеха с SQLite.

Возможно ли преобразование из строки в datetime в запрос или шаблон. Или мне нужно перебирать все записи?

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

ответ

6

Вы можете попробовать использовать тег regroup, чтобы группировать его по месяцам на уровне шаблона. Удостоверьтесь, что данные контекста отсортированы:

{% regroup queryset by date_field|date:"M, Y" as objects_by_month %} 
{% for group in objects_by_month %} 
    {{ group.grouper }} 
    {% for object in group.list %} 
     {{ object }} 
    {% endfor %} 
{% endfor %} 
+0

Но тогда «сумма» не будет суммировать все записи в течение месяца, как мне нужно (другая статья была о нем). мой текущий запрос выглядит следующим образом: 'truncate_date = connection.ops.date_trunc_sql ('месяц', 'data_insercao')' 'fichas_report = Ficha.objects.extra (выберите = { 'месяц': truncate_date}) .values ​​('name', 'month'). annotate (number_entries = Count ('pk')). order_by ('- month') ' Он дает мне список имен и записей по месяцам. –