Django中如何仅通过日期查询datetime类型字段
Django DateTime字段按日期查询解决方案
核心方法1:使用ORM内置__date查询后缀(Django 1.9+ 推荐)
Django ORM为DateTime类型字段提供了__date字段查找后缀,会自动将字段值截断为日期进行匹配,自动兼容项目时区配置,无需手动处理时间范围。
代码修改示例:
from datetime import datetime cname = request.GET['cname'] date_str = request.GET['date'] # 转换请求参数为日期对象 query_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M").date() # 按日期匹配 items = MaterialRequest.objects.filter( owner=cname, delivery_required_on__date=query_date )
核心方法2:时间范围查询(兼容Django 1.9以下版本)
如果使用的是旧版本Django,可手动构造查询当日的起止时间区间进行过滤:
from datetime import datetime, timedelta cname = request.GET['cname'] date_str = request.GET['date'] # 取当日0点 query_start = datetime.strptime(date_str, "%Y-%m-%d %H:%M").replace(hour=0, minute=0, second=0, microsecond=0) # 取次日0点 query_end = query_start + timedelta(days=1) # 匹配时间区间内的所有记录 items = MaterialRequest.objects.filter( owner=cname, delivery_required_on__gte=query_start, delivery_required_on__lt=query_end )
注意事项
- 若请求中拿到的时间字符串保留
+未被转义为空格,将strptime的格式参数调整为"%Y-%m-%d+%H:%M"即可。 - 若无需使用请求参数携带的时间部分,可直接截取字符串前10位的日期部分使用:
date_str = request.GET['date'][:10]。
内容的提问来源于stack exchange,提问作者Rahul Sharma
相关产品推荐
相关产品推荐

