Django在queryset中计算唯一日期

时间:2018-03-31 09:32:59

标签: python django

我有一个返回如下对象的查询集:

[
  {created_at: "2018-03-01"}, 
  {created_at: "2018-03-01"}, 
  {created_at: "2018-03-02"}
]

我想从查询集中选择唯一天数。在上面的示例中,预期答案为2

我当前的查询如下所示,其中created_atDateTimeField

from django.db.models import Count
from django.db.models.functions import TruncDate

days = queryset.annotate(date=TruncDate('created_at')) \
    .values('date') \
    .annotate(dates=Count('date'))

不幸的是,它会返回3,而不是预期的2

1 个答案:

答案 0 :(得分:1)

似乎解决方案是aggregate an annotation,并且还使用.distinct()方法确保每个日期都是唯一的。

所以最后的查询是:

dates = queryset.annotate(date=TruncDate('created_at')) \
    .values('date') \
    .distinct() \
    .aggregate(dates=Count('date'))