列'added_on'的第1行日期时间值'%2014-08-08%'不正确
我正在尝试过滤一个 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
我能想到几种方法来实现这个功能。
- 你可以发挥创意,使用
__range
过滤器,利用从一天开始到一天结束的时间对象。 - 使用
gte
和lte
。 - 我个人会使用一系列日期过滤器,从最细的粒度到最粗的粒度,这样我能一眼就看懂我的代码:
product_list.filter(added_on__year=2014).filter(added_on__month=8).filter(added_on__day=8)
然后让 Django 来进行优化。