Queryset“.dates(...)”返回datetime对象的非独特DateTimeQueryset

时间:2012-02-09 12:31:19

标签: django datetime django-queryset

对于QuerySet个博客条目,我想创建这些帖子的DateQuerySet个月。查询是:

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

According to the docs

  

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

如果我有4个日期条目:

  • (2012年2月3日)
  • (2012年2月2日)
  • (2012年1月24日)
  • (2011年12月28日)

我希望返回3个datetime对象;一个用于DecJanFeb,而是我返回4个,每个原始日期一个

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


更新

解决此问题的一种简单方法是从Set

中制作DateQuerySet
dates = Entry.published.all().dates('pub_date', 'month')
return set(dates)

这会删除重复的datetime个对象,但我仍然不明白为什么会这样(或者如果我误解了date()的工作方式)

2 个答案:

答案 0 :(得分:1)

您的症状听起来与GROUP BY查询完全相同。

您可以print query.query查看是否将排序应用于将添加到SELECT的字段,从而使所有这些排序也相同。

Entry.published.dates('pub_date', 'month').order_by() 

答案 1 :(得分:0)

在日期时间类型的对象情况下,

datetimes()而不是dates()是个好主意。

我的环境:

  • win10 + python3.6.8
  • django2.2.12

仅供参考: