Django 1。9日期时间过滤器

时间:2016-03-31 16:59:00

标签: python django datetime django-1.9

我试图过滤包含以下字段的模型:

TEMP_START = models.DateTimeField(null=True)

我正在使用语法

x.filter(TEMP_START__date = datetime.datetime(2016, 3, 31, 8, 0, tzinfo=<UTC>))

但是,这会返回多个唯一的TEMP_START值。我想这是因为我的数据没有时区存储。但是,我已在settings.py文件中设置:

TIME_ZONE = 'UTC' # 'America/Chicago'

USE_I18N = True

USE_L10N = True

USE_TZ = True

我不确定为什么此过滤器语句返回其他唯一的datetime对象值。我知道&#34; __ date&#34;过滤器是Django 1.9的新功能。这只是一个错误吗?

2 个答案:

答案 0 :(得分:1)

__date字段查找适用于日期(仅限),顾名思义。不是日期时间对象;时间被忽略了。

documentation,特别是示例,也显示了这一点:

  

对于datetime字段,将值转换为日期。允许链接其他字段查找。采用日期值。

     

示例:

     

Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))   Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))

正如它所说:“取一个日期值。”因此,__datedatetime.date对象进行比较,而不是datetime.datetime对象。

您的datetime.datetime对象显然会被转移到引擎盖下的datetime.date对象。

答案 1 :(得分:0)

使用

__contains

关键字似乎提供了最好的结果,我没有遇到过问题。