0

我有一个带有日期字段的文章模型。我想查询所有 Article 对象,并在每个不同的年份返回一个数据类型,然后在其中的每个不同的月份返回一个数据类型。

例如

archives = { 2009: {12, [, , ...], 11: [...]}, 2008: {12, [...], 11: [...]}, }

这可能吗?

4

2 回答 2

4

这类问题似乎经常出现。最简单的解决方案是遍历数据并按年和月对对象进行分组。您可以在视图中手动执行此操作,也可以在模板中使用重新组合。这实际上取决于您想对数据做什么。

如果按年和月对档案进行分组是您在应用程序中非常常见的事情,您可能需要考虑创建一个年和月字段,然后在 save() 中填充该字段。

手动可能是这样的:

arch = {}
for a in Archive.objects.all():
    year = arch.get(a.pub_date.year, {})
    month = year.get(a.pub_date.month, [])
    month.append(a)
    year[a.pub_date.month] = month
    arch[a.pub_date.year] = year

或使用regroup将所有分组逻辑推入模板(未经测试):

{% regroup archives by pub_date.year as year_list %}
{% for year in year_list %}
  Year: {{ year.grouper }}
  {% regroup year.list by pub_date.month as month_list %}
  {% for month in month_list %}
    Month: {{ month.grouper }}
    {% for archive in month.list %}
      {{ archive }}
    {% endfor %}
  {% endfor %}
{% endfor %}

我个人会尝试将逻辑放在视图中而不是模板中。

以下是一些相关的帖子:

于 2010-02-02T01:52:22.293 回答
0

没有快速的解决方案,但您可以检查dates()方法。

于 2010-02-02T00:46:06.517 回答