所以有的時候一對夫婦遷移後,我的第一次,我決定我要包括以下字段:Django 1.8遷移。創建數據庫後添加DateTimeField。最佳實踐?
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
到我的車型之一。當我makemigrations
它給了我 You are trying to add a non-nullable field 'created' to episode without a default; we can't do that (the database needs something to populate existing rows).
所以我當時把它改爲
created = models.DateTimeField(auto_now_add=True, default=datetime.now)
試圖再次makemigrations
後,說at_api.Episode.modified: (fields.E160) The options auto_now, auto_now_add, and default are mutually exclusive. Only one of these options may be present.
好,所以我就繼續和刪除auto_now_add
created = models.DateTimeField(default=datetime.now)
我現在可以makemigrations
沒有任何問題。然後我刪除了default=datetime.now
,並用auto_now_add=True
替換它,然後再次遷移,沒有任何問題。然而,我不禁覺得這可能不是做事的最佳方式。我覺得項目後期可能會出現問題。
是的,django的確問我現有行的一次性價值。我試過'datetime.now',但它似乎沒有工作。但是我認爲一切都很好呢?對於現有的行值,將「null = True」設置爲「佔位符」是否典型,然後稍後將其刪除以替換其他值? – pyramidface
'datetime.now()'本來有效(注意圓括號 - 你想調用函數並使用它的返回值)。在需要爲不同行分配不同值的更復雜情況下,您可以添加和刪除'null = True'。例如,假設您將實際創建日期存儲在某個文件中。你會寫一個數據遷移,爲每一行查找文件中的日期,然後將其放入數據庫中。之後,您可以刪除'null = True'並再次遷移。 –
啊,好吧,我會在未來的項目中記住這一點。謝謝!! – pyramidface