django - django 根据日期列表过滤查询集并获取每天的计数
问题描述
我有一个这样的模型
class MyModel(models.Model):
date = models.DatetimeField(auto_now_add=True)
我有一个日期列表(过去 7 天的日期,也可以是过去 30 天的日期)。我想要做的是获取在所有日期中特定日期创建的 MyModel 对象的数量。如下所示。
[{'date1': 2}, {'date2': 3}, {'date3': 7}....{'daten':26}]
字典的键是日期,值是在该特定日期创建的对象数。通过使用 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}
如果日期不存在,它将不在字典中。所以字典中没有的日期有 count 0
。这是由于封闭世界假设(CWA)。
推荐阅读
- javascript - 如何将下面的代码移动到它自己的模块中并且仍然能够访问变量 gfs?
- function - 与文本存储以太坊的智能合约
- r - 在 R 中为 ggplot2 组合数据框中的多列
- linux-kernel - Linux内核模块构建生成的.o.ur-safe文件是什么?
- javascript - React Router & Link:它不尊重搜索参数(或者我认为)
- rust - 裸机 Raspberry Pi 帧缓冲区不工作
- r - 根据另一列中的条件替换列中的值
- python-3.x - 在 django-rest-framework 中获取自定义查询集以及序列化关系响应的方法
- python-3.x - 修改请求中的参数以使用邮政编码抓取 zillow 数据
- javascript - [已解决]尝试使用 Node.JS 更新数据库 - 'UPDATE password SET password = NULL' 在第 1 行"