You need to enable JavaScript to run this app. Django如何使用filter查询当日创建的Device模型数据
优惠活动
大模型
产品
解决方案
定价
更多

Django如何使用filter查询当日创建的Device模型数据

问题原因

你之前的查询不生效是因为Device模型的date_created字段是DateTimeField类型,存储的是包含「日期+时分秒」的完整时间戳,直接和仅包含日期的today做等值匹配,仅会命中创建时间恰好是今日0点0分0秒的记录,绝大多数场景都不会返回正确结果。

解决方案

方案1:使用Django内置的日期查找(推荐,Django 1.9及以上版本支持)

直接通过__date后缀提取date_created的日期部分和今日日期匹配,同时注意使用Django内置的timezone模块处理时间,避免时区不匹配问题:

from django.utils import timezone

# 获取当前时区下的今日日期
today = timezone.now().date()
device_today = Device.objects.filter(date_created__date=today).count()

方案2:使用时间范围查询(兼容低版本Django)

如果使用的Django版本低于1.9,可以手动限定查询时间范围为今日0点到明日0点:

from django.utils import timezone

# 获取当前时区下今日的开始时间和明日的开始时间
today = timezone.now().date()
today_start = timezone.make_aware(timezone.datetime.combine(today, timezone.datetime.min.time()))
tomorrow_start = today_start + timezone.timedelta(days=1)

device_today = Device.objects.filter(date_created__gte=today_start, date_created__lt=tomorrow_start).count()
注意事项

如果项目配置了USE_TZ = True开启了时区支持,不要使用Python原生的datetime.datetime.today()等方法获取时间,否则会出现时区偏移导致的日期统计错误。

内容的提问来源于stack exchange,提问作者Toufik Benkhelifa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 22:54:02