Django ORM 使用日期字符串查询 DateTimeField

3,575 阅读1分钟

MedusaSorcerer的博客


问题描述

在使用 Django 开发的时候可能预设的字段是 DateTimeField 类型的, 但是由于一些业务原因, 现将查询的字段值为 xxxx-xx-xx 的日期类型字符串, 而我想直接通过日期的字段数据直接查询 DateTimeField, 最终将结果展示。

我的业务讲解

我开发的 M&OAS 中日报系统字段是 DateTimeField 类型, 而查询的字段值是日期类型的, 结果是以日期为条件, 并约束在相同的项目内的数据, 展示、修改或新增。

解决

解决的流程罗列:

  1. 判断参数有效性
  2. 参数拆分相关位置数据
  3. 组合查询 Model
import datetime

from .model import Model

try:
    date = datetime.datetime.strptime('2020-10-23', '%Y-%m-%d')
except ValueError:
    # 参数异常
    ...
Model.objects.filter(
    date__year=date.year,
    date__month=date.month,
    date__day=date.day,
)

你需要将 Model 换成你的 ORMModel, 并且将 2020-10-23 替换成你传递日期字符串的参数名, 补充 #参数异常 处的代码块, ORM 查询条件中 date__xxx 是你 ORM 的 DateTimeField 字段名, 如你的字段名是 abc, 那你需要将查询条件参数修改成 abc__yearabc__monthabc__day即可。