2016-07-28 40 views
2

說我有這些遷移:Django的: 「列​​不存在」,同時運行數據遷移

  • 0001_initial
  • 0002_add_some_column
  • 0003_some_data_migration

一切都很好,在那點,但如果我再添加一個模式遷移:

  • 0004_add_ 酒吧 _column

,然後嘗試運行鍼對一個新的DB的遷移,或任何DB不具有0003的是,0003將博克,因爲「不存在的列巴」 。

處理這種情況的正確方法是什麼?添加模式遷移時,是否必須重新完成數據遷移,這樣數據遷移總是會持續下去?有沒有辦法讓數據遷移不在意「酒吧」還不存在?數據遷移沒有使用「酒吧」,但由於某種原因,Django仍然認爲它需要它存在的那一點...

我使用內置的Django遷移,而不是南。

回答

2

您如何訪問數據遷移中的模型?

確保您通過apps/schema_editor訪問ORM,而不是直接導入模型。

傳遞給您的遷移工作器函數的第一個參數是一個應用程序註冊表,它具有加載到其中的所有模型的歷史版本,以匹配遷移所在歷史記錄中的位置。

即在您的數據遷移,你不應該有這樣一行:

from my_app import MyModel 

而是更多的東西像這樣

MyModel = apps.get_model("my_app", "MyModel") 
+0

我的應用程序使用'爲MyModel = apps.get_model( '程序my_app' ,'my_model)'來獲取模型,然後通過'MyModel.objects.create()'創建東西。那是正確的方法嗎? – Troy

+1

其實,貌似有一個模型直接導入。這一定是問題。謝謝你的幫助! – Troy