Django ORM distinct over annotated value

lyfkaqu1  于 2023-04-22  发布在  Go
关注(0)|答案(2)|浏览(80)

我有一个模型,它有一个DateTimeField时间戳。什么是最好的方法来查看每天(月,小时等)的条目数,只是使用Django ORM(而不是原始SQL)?

nuypyhwy

nuypyhwy1#

您可以使用Count获取总行数。仅限年份:

from django.db.models import Count

MyModel.objects.all().values("timestamp__year").annotate(
    count=Count("timestamp")
).order_by("timestamp__year")

同一日期:

MyModel.objects.all().values("timestamp__date").annotate(
    count=Count("timestamp")
).order_by("timestamp__date")

同一个小时:

MyModel.objects.all().values("timestamp__hour").annotate(
    count=Count("timestamp")
).order_by("timestamp__hour")

最后一个显然不关心日期或年份。但是你的描述非常模糊。无论如何,这给了你一个很好的概述。

7d7tgy0s

7d7tgy0s2#

这个怎么样?

result_qs = MyModel.objects.all().annotate(
    date=TruncDay('created_at')
).values("date").annotate(
    created_count=Count('id')
).order_by("-date")

for instance in result_qs:
    instance.get('date')
    instance.get('created_count')

相关问题