簡體   English   中英

在Django模型中使用默認日期的正確方法

[英]Correct way to use a default date in a django model

我有兩個模型,兩個模型都有一個默認為當前日期的date字段,無論是哪種類型。 今天有人指出他們從其中一個那里得到了一個錯誤,該錯誤將日期設置為12月19日而不是12月23日(在撰寫本文時為今天)。

我以為兩個字段的設置相同,所以我檢查了兩者之間的意外差異並找到了一個。 但是我感到驚訝,因為“工作”的那個在我看來像是包含一個錯誤的那個。 字段設置如下:

# Working field
date_stamp = models.DateField(default=datetime.date.today)

# Broken field
date_statp = models.DateField(default=datetime.date.today())

我一直認為today功能需要調用,以確保未緩存該值。 事實恰恰相反嗎? 有人可以解釋在創建模型實例時實際上如何解釋這兩種情況嗎?

第一個字段:

date_stamp = models.DateField(default=datetime.date.today)

將回調作為默認值。 這意味着該函數將在每次需要填充默認值時被調用。

另一個:

date_statp = models.DateField(default=datetime.date.today())

執行函數datetime.date.today ,該函數返回當時的日期值。 因此,當Django初始化模型時,它將在該精確時刻將默認值設置為日期。 該默認值將一直使用,直到Django再次重新初始化模型(通常僅在啟動時)。

第一次導入模塊時運行類定義,然后執行datetime.data.today()調用。 因此,它將在Django基本啟動時運行,並且在首次導入后不會更改。

如果不帶引號,則將默認設置為函數對象(可調用)。 當Django創建新實例並且默認值是可調用的時,Django會調用它並將返回值用作默認值。 這就是您想要的-沒有引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM