我有一个带有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's day = 20的对象进行检索时,Django没有找到该元素
In [11]: MyObj.objects.filter(date_field__day=20)
Out[11]: <QuerySet []>但是,如果我选择date_field's day = 19的元素,它会找到我的对象。
In [12]: Regime.objects.filter(start_date__day=19)
Out[12]: <QuerySet [my_obj]>有人能解释这种奇怪的行为吗?这是预期的行为吗?
发布于 2017-12-01 06:56:08
这显然是一个时区问题,因为您的时间设置为0, 0, 1。
您自己的时区不是UTC,所以Django告诉您没有对象属于您的11月20日这一天是正确的。
这取决于你的应用,这可能是也可能不是预期的行为。例如,如果您正在跟踪论坛帖子,那么在您的时区查看内容而不是在其他时区查看内容是有意义的。
如果您想避免所有这些,因为您将字段命名为"date_field",我假设您不关心时间,所以只需使用DateField而不是DateTimeField。
https://stackoverflow.com/questions/47583844
复制相似问题