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

如何在Django中从日期时间字段筛选指定日期的数据?

解决Django中DateField的日期筛选问题

问题根源

你的代码将前端传入的日期字符串转换为datetime.datetime对象(带时间部分,如2022-11-24 00:00:00),但模型里的start_time和end_time是DateField类型,存储的是纯日期值(如2022-11-24)。用带时间的datetime对象做精确匹配,自然查不到对应记录。

解决方案

1. 转换为date类型做精确匹配

将转换后的datetime对象提取出date部分,直接匹配DateField:
修改views.py中的日期转换代码:

f_date = datetime.datetime.strptime(from_date,'%Y-%m-%d').date()
t_date = datetime.datetime.strptime(to_date, '%Y-%m-%d').date()

然后筛选语句保持不变:

get_records_by_date = Scrapper.objects.filter(start_time=f_date, end_time=t_date)

2. 筛选时间段内的记录(可选)

如果你的需求是获取start_time在from_date到to_date之间,或end_time在该区间的记录,用Django的字段查找运算符:

# 匹配start_time >= from_date 且 end_time <= to_date的记录
get_records_by_date = Scrapper.objects.filter(
    start_time__gte=f_date,
    end_time__lte=t_date
)

3. 修复模型字段的默认值错误

你的Scrapper模型中DateField的默认值设置有误:

start_time = models.DateField(default=True)
end_time = models.DateField(default=True)

default=True会导致类型错误,应该改为合法的日期默认值,比如:

start_time = models.DateField(default=datetime.date.today)
end_time = models.DateField(default=datetime.date.today)

或者使用Django的timezone:

from django.utils import timezone
start_time = models.DateField(default=lambda: timezone.now().date())
end_time = models.DateField(default=lambda: timezone.now().date())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:10:49