分组在Django 2中的每个日期

时间:2018-01-17 12:37:24

标签: python django postgresql django-queryset django-aggregation

我有一个名为Log的模型,它有一个日期时间字段created_at

我想要做的是计算每个日期Log的数量。

我试着这样做:

from django.db.models.functions import TruncDate

Log.objects.annotate(date=TruncDate('created_at')).values('date').annotate(c=Count('id'))

这给了我以下内容:

{'date': datetime.date(2018, 1, 17), 'count': 1}, {'date': datetime.date(2018, 1, 17), 'count': 1}, {'date': datetime.date(2018, 1, 17), 'count': 2}

也就是说,date不是唯一的。

我想要的结果是:

{'date': datetime.date(2018, 1, 17), 'count': 4}, {'date': datetime.date(2018, 1, 18), 'count': 2}

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果在Log模型中设置默认排序,则会在查询的GROUP BY部分添加额外字段,这可能会导致此问题。尝试删除订购。

Log.objects.order_by().annotate(date=TruncDate('created_at')).values('date').annotate(c=Count('id'))

答案 1 :(得分:0)

您可以使用 distinct ()方法在Django中获取唯一值

<强>实施例

Log.objects.annotate(date=TruncDate('created_at')).values('d‌​‌​ate').distinct()