django.utils.timezone返回天真的约会?

django.utils.timezone returning naive date?

使用django 1.4,我有一个带有datetimefield的模型。我导入django.utils.timezone用作默认值。

1
2
from django.utils import timezone
date = models.DateTimeField(default=timezone.now)

但是我仍然收到关于datetimefield received naive date的警告。我已经将use-tz设置为true,所以它应该返回已知的日期时间


Djangos输入了一个默认日期值,该值不受TZ影响,因为默认情况下该字段不可为空。将空值设置为真意味着它只会将日期设置为空,因此不会引发警告:

1
 date = models.DateTimeField(default=timezone.now, null=True)


在我的例子中,我在运行测试时一直收到这个问题。这是因为以前的迁移错误地使用了日期时间而不是时区。我恢复到引起警告的迁移之前,删除了它,再次运行makemigrations。这为我解决了这个问题。


我知道这是站在一边的问题,但你有没有在你的领域尝试过auto_now_add=True?不需要使用EDOCX1[1]来满足您的需求。

另一方面,如果您确实有USE_TZ=True,您的版本也应该可以工作。

我认为它确实有效,您可以从某个地方直接设置date字段(而不是从默认值)获得RunTimeWarning。尝试缩小警报触发的时间范围。


now()

Returns an aware or naive datetime that represents the current
point in time when USE_TZ is True or False respectively.

https://docs.djangoproject.com/en/dev/ref/utils/django.utils.timezone.now.