列'added_on'的第1行日期时间值'%2014-08-08%'不正确

1 投票
2 回答
1109 浏览
提问于 2025-04-18 17:15

我正在尝试过滤一个 DateTimeField,并且想要和一个日期进行比较,代码如下:

import datetime  

product_list.filter(added_on__contains=datetime.date(2014, 8, 8))

这段代码会发出一个警告。

Warning at /specs/filter/
Incorrect datetime value: '%2014-08-08%' for column 'added_on' at row 1

那么,正确的做法应该是什么呢?

2 个回答

0

在Django模型中,contains这个方法是用来处理文本输入(字符串类型)的,所以如果你在日期时间字段上使用contains,就会出现错误。因此,你需要用其他方式来筛选,比如:

product_list.filter(added_on=datetime.datetime(2014, 8, 8, 16, 12, 30))

或者像这样使用:product_list.filter(last_updated__gte=datetime.date(2014,7,8)).filter(last_updated__lte=datetime.date(2014,7,10))

0

我能想到几种方法来实现这个功能。

  1. 你可以发挥创意,使用 __range 过滤器,利用从一天开始到一天结束的时间对象。
  2. 使用 gtelte
  3. 我个人会使用一系列日期过滤器,从最细的粒度到最粗的粒度,这样我能一眼就看懂我的代码:

product_list.filter(added_on__year=2014).filter(added_on__month=8).filter(added_on__day=8)

然后让 Django 来进行优化。

撰写回答