django根据日期列表过滤queryset,并获取每天的计数



我有一个类似的模型

class MyModel(models.Model):
date = models.DatetimeField(auto_now_add=True)

我有一个日期列表(最近7天的日期,也可以是最近30天的日期(。我想做的是获取在所有日期中某一天创建的MyModel对象的数量。如下图所示。

[{'date1': 2}, {'date2': 3}, {'date3': 7}....{'daten':26}]

dictoary的键是日期,值是在该特定日期创建的对象数。通过使用forloop并多次点击db,我得到了输出,但有没有办法从一个查询中得到它?

您可以进行一个查询,统计每个日期的对象数量:

from datetime import timedelta
from django.db.models import Count, F
from django.utils.timezone import now
qs = MyModel.objects.filter(
date__date__gte=now().date()-timedelta(days=30)
).values(
datedate=F('date__date')
).annotate(
number=Count('pk')
).order_by('datedate')

接下来,我们可以将处理结果发布到字典列表中,或者更好的是,映射计数上的数据的单个字典:

# list of dictionaries
[{r['datedate']: r['number']}for r in qs]
# single dictionary
{r['datedate']: r['number']for r in qs}

如果日期不存在,它就不会出现在字典里。因此,字典中没有的日期具有计数0。这是由于闭世界假设(CWA(

最新更新