django模型日期日被过滤到前一天

时间:2017-11-30 22:42:25

标签: python django django-models

我有一个带有DateTimeField的模型,我已将其设置为2017年11月20日

In [23]: my_obj.date_field
Out[23]: datetime.datetime(2017, 11, 20, 0, 0, 1, tzinfo=datetime.timezone.utc)

但是当我尝试通过选择date_field天= 20的对象进行检索时,Django找不到元素

In [11]: MyObj.objects.filter(date_field__day=20)
Out[11]: <QuerySet []>

但是,如果我选择date_field天= 19的元素,它会找到我的对象。

In [12]: Regime.objects.filter(start_date__day=19)
Out[12]: <QuerySet [my_obj]>

有人可以解释这种奇怪的行为吗?这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

这显然属于时区问题,因为您的时间设置为0, 0, 1

你自己的时区不是UTC,所以Django告诉你没有任何对象属于11月20日的你的日。

根据您的应用,这可能是也可能不是预期的行为。例如,如果您正在跟踪论坛帖子,那么在您的时区而不是其他内容中查看内容是有意义的。

如果你想避免所有这些,因为你将你的字段命名为&#34; date_field&#34;,我假设你不关心时间,所以只需使用{{1}而不是DateField