Django Queryset";。日期(……)”;返回datetime对象的非唯一DateTimeQueryset

Django Queryset";。日期(……)”;返回datetime对象的非唯一DateTimeQueryset,django,datetime,django-queryset,Django,Datetime,Django Queryset,对于博客条目的QuerySet,我想创建一个发布这些文章的月份的DateQuerySet。查询是: dates = Entry.published.all().dates('pub_date', 'month') “月”返回字段的所有不同年/月值的列表 如果我有4个带日期的条目: (2012年2月3日) (2012年2月2日) (2012年1月24日) (2011年12月28日) 我希望返回3个datetime对象;一个用于12月、1月、2月,我得到了4个返回值,每个原始日期返回一个 这

对于博客条目的
QuerySet
,我想创建一个发布这些文章的月份的
DateQuerySet
。查询是:

dates = Entry.published.all().dates('pub_date', 'month')

“月”返回字段的所有不同年/月值的列表

如果我有4个带日期的条目:

  • (2012年2月3日)
  • (2012年2月2日)
  • (2012年1月24日)
  • (2011年12月28日)
我希望返回3个datetime对象;一个用于12月、1月、2月,我得到了4个返回值,每个原始日期返回一个

这是预期的行为吗?我尝试将
distinct()
添加到查询中,但它仍然返回每个日期


更新

解决此问题的一个简单方法是从
日期查询集
创建一个

dates = Entry.published.all().dates('pub_date', 'month')
return set(dates)

这将删除重复的
datetime
对象,但我仍然不明白为什么会发生这种情况(或者如果我误解了dates()的工作原理)

您的症状听起来就像是带有顺序的
分组查询

您可以
打印查询。查询
,查看是否对要添加到
选择
的字段应用了排序,从而使所有这些字段都不同

Entry.published.dates('pub_date', 'month').order_by() 
datetimes()
而不是
dates()
,在datetime类型对象的情况下是一个好主意

我的环境:

  • win10+Python 3.6.8
  • django2.2.12
供参考:

  • 日期时间:
  • 日期:

我很好奇,dates=Entry.published.dates('pub_date','month')返回什么?它返回一个
DateQuerySet
,它基本上是一个
datetime
对象的列表。它会为原始查询集中的每个条目返回一个,而不管是否在同一个月内发生。它是否也会像使用all()调用的版本一样返回重复的日期?是否使用默认管理器?否,但是
published
管理器继承了默认设置,只是从futureOops中筛选出条目,忘记了这个问题-我的黑客解决了它。我很快就会查出来