Python 使用Django ORM按日期对对象进行排序和分组

Python 使用Django ORM按日期对对象进行排序和分组,python,django,django-orm,Python,Django,Django Orm,我有一个带有日期字段的文章模型。我想查询所有的Article对象,并在每个不同的年份返回一个数据类型,然后在该年份内每个不同的月份返回一个数据类型 比如说 档案={ 2009: {12, [, ...], 11: [...]}, 2008: {12, [...], 11: [...]}, } 这可能吗?没有快速解决方案,但你可以检查方法。没有快速解决方案,但你可以检查方法。这类问题似乎经常出现。最简单的解决方案是遍历数据并按年份和月份对对象进行分组。可以在视图中手动执行此操作,也可以在模板中

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

比如说


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


这可能吗?

没有快速解决方案,但你可以检查方法。

没有快速解决方案,但你可以检查方法。

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

如果按年份和月份归档存档是应用程序中非常常见的事情,您可能需要考虑创建一个在SaveE()上填充的年和月字段。 用手可以是这样的:

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
或者使用(未测试)将所有分组逻辑推送到模板中:

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

以下是一些相关帖子:


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

      如果按年份和月份归档存档是应用程序中非常常见的事情,您可能需要考虑创建一个在SaveE()上填充的年和月字段。 用手可以是这样的:

      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
      
      或者使用(未测试)将所有分组逻辑推送到模板中:

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

      以下是一些相关帖子:


      例如,如果您想将其作为月份,
      [(date,Model.objects.filter(pub\u date\uu year=date.year,pub\u date\uu month=date.month)作为Model.objects.dates中的date('pub\u date','month')]
      将为您提供每个月的
      (日期,查询集)
      元组列表(假设您的字段名为
      pub\u date
      )。例如,如果您想将其用于月份,
      [(date,Model.objects.filter(pub\u date\uuu year=date.year,pub\u date\uuu month=date.month))用于Model.objects.dates('pub\u date','month')]
      将为您提供每个月的
      (date,QuerySet)
      元组列表(假设您的字段名为
      pub\u date
      )。我有一个想法,使用原始MySQL查询创建一个新字段(smth如YYYY_-MM),然后使用
      map
      填充存档变量。我有一个想法,使用原始MySQL查询创建一个新字段(smth如YYYY_-MM),然后使用
      map
      填充存档变量。