我有有一個日期時間域的模型:的Django的DateField默認選項
date = models.DateField(_("Date"), default=datetime.now())
當我檢查在建Django管理應用程序,檢測DateField也有附加給它的時間,因此,如果你嘗試保存它會返回一個錯誤。我如何設定默認日期? (datetime.today()也不工作)
我有有一個日期時間域的模型:的Django的DateField默認選項
date = models.DateField(_("Date"), default=datetime.now())
當我檢查在建Django管理應用程序,檢測DateField也有附加給它的時間,因此,如果你嘗試保存它會返回一個錯誤。我如何設定默認日期? (datetime.today()也不工作)
這就是爲什麼你應該總是導入基礎datetime
模塊:該模塊內import datetime
,而不是datetime
類:from datetime import datetime
。
您所犯的另一個錯誤是實際上在默認情況下調用該函數,其中()
。這意味着所有型號在課程首次定義時會得到 - 因此,如果您的服務器在不重新啓動Apache的情況下保持數天或數週,所有元素將與初始日期相同。
等等領域應該是:
import datetime
date = models.DateField(_("Date"), default=datetime.date.today)
你錯誤的是使用日期時間模塊,而不是日期模塊。你的意思是這樣:
from datetime import date
date = models.DateField(_("Date"), default=date.today)
如果你只想要捕捉當前日期來處理,這是使用auto_now_add參數的正確方法:
date = models.DateField(_("Date"), auto_now_add=True)
然而,modelfield docs明確指出auto_now_add並且auto_now將始終使用使用當前日期,而不是您可以覆蓋的默認值。
這應該做的伎倆:
models.DateTimeField(_("Date"), auto_now_add = True)
我的朋友,我認爲你讀錯了。問題是關於DateField而不是關於DateTimeField。 – xxbinxx 2017-12-06 10:44:06
date = models.DateTimeField(default=datetime.now, blank=True)
DateTimeField不一樣。如果您將日期時間作爲默認值提供給DateField,則會遇到問題。 – onekiloparsec 2017-12-17 10:41:28
你也可以使用lambda
。如果你正在使用django.utils.timezone.now
date = models.DateField(_("Date"), default=lambda: now().date())
看看[文檔](https://docs.djangoproject.com/en/1.7/ref/models/fields/#default)。使用lambda作爲默認可調用封裝並不好: '請注意,lambda不能用於默認字段選項,因爲它們不能被遷移序列化。請參閱該文檔以瞭解其他注意事項 – pulina 2015-03-17 13:27:13
有沒有辦法做到這一點添加時間增量?例如:default = datetime.date.today + datetime.timedelta(days = 4)...這段代碼不起作用,但這就是主意。 (當然,save方法是這樣做的一個地方,但只是想知道是否有辦法做到這一點作爲定義的一部分) – 2011-02-21 18:30:03
@Joe J:這應該是一個真正的新問題。但是,您可以使用可調用的事實意味着您可以定義今天返回+4的自己的函數。 – 2011-02-21 20:38:38
'_(「Date」)'做什麼? – benregn 2011-08-05 18:50:48