You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django DateTimeField过滤无结果:预期5条数据却返回空

问题排查与解决

1. 时间字符串格式错误(最可能原因)

你写的时间字符串是'2022-07-26 2019:30:00',对应的格式符是'%Y-%m-%d %H:%M:%S',其中%H是24小时制的两位小时数(范围00-23),但字符串里的小时部分写成了2019(四位),这会导致strptime解析出完全错误的时间,甚至直接抛出异常。

正确的时间字符串应该是类似'2022-07-26 19:30:00'(假设小时是19点),对应格式符才能正确解析。

2. 查询条件逻辑不符合预期

当前查询条件是:

start_time__gte=开始时间,
end_time__lte=结束时间

这要求记录的整个时间段完全落在查询区间内。如果你的数据是每分钟一条,比如每条记录的start_time是19:30:00、19:31:00...,end_time是19:31:00、19:32:00...,那么:

  • 第一条记录end_time=19:31:00满足lte=19:35:00,start_time=19:30:00满足gte=19:30:00,会被匹配
  • 但如果你的查询结束时间是19:35:00,最后一条记录的end_time如果是19:35:00才会被包含,若end_time是19:36:00则不会被匹配

如果你的需求是只要记录的时间段与查询区间有重叠,应该调整条件为:

example.objects.filter(
    name='John',
    start_time__lte=结束时间,
    end_time__gte=开始时间
)

3. 语法错误

你的查询语句中,start_time__gte这一行末尾缺少逗号,正确的写法应该是:

a = example.objects.filter(
    name='John',
    start_time__gte=datetime.datetime.strptime('2022-07-26 19:30:00','%Y-%m-%d %H:%M:%S'),
    end_time__lte=datetime.datetime.strptime('2022-07-26 19:35:00','%Y-%m-%d %H:%M:%S')
)

缺少逗号会导致语法错误,不过如果代码能正常执行,可能是你输入时遗漏了。

验证步骤

  1. 先单独打印解析后的时间,确认是否正确:
start = datetime.datetime.strptime('2022-07-26 19:30:00','%Y-%m-%d %H:%M:%S')
end = datetime.datetime.strptime('2022-07-26 19:35:00','%Y-%m-%d %H:%M:%S')
print(start, end)

确保输出的时间是你预期的区间。

  1. 检查数据库中name='John'的记录,确认它们的start_time和end_time是否真的落在(或重叠于)你要查询的区间内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:36:32