Django中如何查询DateTimeField字段对应今日创建的所有模型条目
Django DateTimeField按日期查询今日数据方案
你原查询失败的原因是DateTimeField存储的内容包含时分秒,直接和日期对象匹配时,相当于要求created_at精确等于今日0点整,自然只能匹配到刚好在这个时间点创建的条目。可以用以下两种方案解决:
方案1:使用Django内置日期查询后缀(推荐,Django 1.9+支持)
直接用__date字段查找后缀,Django会自动提取DateTimeField的日期部分做匹配,忽略时分秒:
from datetime import datetime # 普通时区未开启场景使用 Maca.objects.filter(created_at__date=datetime.today().date())
如果你的项目开启了时区支持(settings.py中USE_TZ = True),请使用Django自带的时区工具避免时区偏移问题:
from django.utils import timezone Maca.objects.filter(created_at__date=timezone.localdate())
方案2:时间范围查询(兼容所有Django版本)
手动构造今日0点到次日0点的时间范围做区间查询,性能和内置后缀一致,兼容所有Django版本:
from datetime import datetime, timedelta today = datetime.today().date() start = datetime.combine(today, datetime.min.time()) end = start + timedelta(days=1) Maca.objects.filter(created_at__gte=start, created_at__lt=end)
注意:如果需要时区适配,把上面的
datetime替换为django.utils.timezone对应的方法即可。
内容的提问来源于stack exchange,提问作者maca
相关产品推荐
相关产品推荐

