我正在四处寻找如何按月分组django查询集。我终于找到了这段非常有用的代码:
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}}
。似乎原始发件人(Oli)有同样的问题。虽然正在回答的人说它适用于postgres但我没有在SQLite上取得任何成功。
是否可以在查询或模板中将字符串转换为日期时间。或者我是否必须遍历所有条目?
很抱歉以分开的趋势发帖,但我没有足够的特权来评论原文。
答案 0 :(得分: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 %}