2012-04-06 52 views
7

使用Django 1.4我有一个DateTimeField字段的模型。我导入了django.utils.timezone作为默认值。django.utils.timezone返回天真日期?

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

但是我仍然收到有关DateTimeField收到天真日期的警告。 我已经设置USE_TZ为true,所以它应该返回知道日期时间

回答

2

Django的投入默认日期值未TZ知道,因为在默认情况下未启用场可为空。设置为null为true意味着它只是设置的日期,而不是空,因此警告心不是提出:

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

我可能是无知的,但我不明白是什么null有用timezone.now()做天真。如果Null = True,那么.now()会返回一个感知对象? – AllTradesJack 2014-08-19 00:46:33

+0

django输入的默认值不是时区知道 – mobiletim 2014-12-21 13:27:08

+0

@mobiletim我仍然有点困惑,为什么要设置'null = True'使错误消失? – 2016-06-02 13:50:41

-1

我知道这是侧步的问题,但你在你的领域尝试auto_now_add=True呢?无需使用default你想要的东西。

另一方面,您的版本应该工作以及如果你确实USE_TZ=True

我想说它可以工作,并且您从某处直接设置date字段而不是从默认设置中获得RunTimeWarning。尝试缩小什么时候更准确地触发警告。

+0

auto_now_add是时区感知的Django应用程序的错误样式 – fangsterr 2013-02-11 06:19:14

+0

@fangsterr请问您为什么这么想?如果你也解释你的推理,这将会更有用。 – 2013-02-13 07:29:27

+0

看到http://stackoverflow.com/questions/10195020/why-django-lint-te-the-auto-now-add-is-deprecated – fangsterr 2013-02-14 08:21:35

0

就我而言,我一直接受这个问题,当我跑测试。这是因为过去的迁移错误地使用了日期时间而不是时区。我恢复到迁移的前一个引起警告,删除了它,又跑makemigrations。这解决了我的问题。