我正在開發一個Django應用程序,並且遇到了一個關於並行進行的2個南部遷移的奇怪問題。爲什麼模式遷移 - 自動創建虛假遷移?
一次遷移對應於創建一個新模型(我們稱其爲'0001_add_model'),第二個遷移對應於將字段添加到現有模型(我們稱之爲'0001_add_new_field_to_model')。現在,這兩個遷移是在兩個不同的分支平行進行的(我不會再犯這個錯誤)。當我運行./manage.py migrate
時,南告訴我存在問題,並且我可以用--merge
運行該命令來運行遷移。鑑於這兩項行動涉及不同的模式,我認爲這樣做不應該有問題,所以我做到了,一切順利。
從這一點起,我做了一個./manage.py schemamigration --auto
這個問題就出現了,它產生了一個與'add_model'實際上相同的遷移,除了'add_field_to_model'中添加的字段。它看起來像這樣:
(*) 0001_auto__add_model
(*) 0001_auto__add_new_field_to_model
-> () 0002_auto__add_model
如果我做的其他方式則產生相反的,即遷移補充說,在「add_field_to_model」添加字段。在這兩種情況下,生成的新遷移顯然都不適用,因爲這些更改已經存在於數據庫中。
讓我困惑的是爲什麼它會產生這樣的遷移。南方的自動檢測器如何工作以創建新的遷移?
我爲了繼續開發而做的就是用--fake
運行這種虛假遷移,但我認爲最終的解決方案將是重置遷移歷史,因爲這一點很麻煩,因爲它在幾個環境中被複制。
它的工作!不幸的是,每當兩個或更多的遷移並行產生,我想這個問題就會出現。當南方抱怨時,猜測這將是一個特別關注的問題。謝謝! – MartinDM