【问题标题】:Grouping by months in Django and retrieving as datetime.date()在 Django 中按月分组并检索为 datetime.date()
【发布时间】:2012-03-30 05:22:42
【问题描述】:

我正在四处寻找如何按月对 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}}。原来的发件人(奥利)似乎也有同样的问题。虽然回答的人说它适用于 postgres,但我在 SQLite 上没有任何成功。

是否可以在查询或模板中从字符串转换为日期时间。还是我必须遍历所有条目?

很抱歉在一个单独的趋势中发布,但我没有足够的权限来评论原始趋势。

【问题讨论】:

    标签: python django datetime django-aggregation


    【解决方案1】:

    您可以尝试使用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 %}
    

    【讨论】:

    • 但是“金额”不会根据我的需要汇总一个月的所有条目(另一篇文章是关于它的)。我当前的查询如下所示:truncate_date = connection.ops.date_trunc_sql('month', 'data_insercao')fichas_report = Ficha.objects.extra(select={'month': truncate_date}).values('name', 'month'). annotate(number_entries=Count('pk')).order_by('-month') 它按月份为我提供了姓名和条目列表。
    猜你喜欢
    • 1970-01-01
    • 2014-10-24
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2012-02-03
    • 2019-01-23
    相关资源
    最近更新 更多