2012-04-06 82 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。這解決了我的問題。