我有一个返回如下对象的查询集:
[
{created_at: "2018-03-01"},
{created_at: "2018-03-01"},
{created_at: "2018-03-02"}
]
我想从查询集中选择唯一天数。在上面的示例中,预期答案为2
。
我当前的查询如下所示,其中created_at
是DateTimeField
:
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
。
答案 0 :(得分:1)
似乎解决方案是aggregate an annotation,并且还使用.distinct()
方法确保每个日期都是唯一的。
所以最后的查询是:
dates = queryset.annotate(date=TruncDate('created_at')) \
.values('date') \
.distinct() \
.aggregate(dates=Count('date'))