2016-09-14 85 views
1

在模型中,我有一個IntegerField映射到CHOICES元組。該字段的要求已經改變,更新該元組中的選項將需要過於頻繁的維護,所以我決定將其更改爲CharFieldDjango遷移 - 將模型從Int更改爲CharField並從選項中預填充

有沒有一種方法可以在遷移中執行此操作,或者創建一個新的列,更新適當的值並刪除舊的列會更好嗎?

回答

1

您改變了架構,所以你一定需要一個架構遷移和Django會爲你做的,用makemigrations命令。

但是由於您也在更改列的類型,其中填充整數,現在應該轉換爲字符,Django不會爲您自動執行此操作,因此您需要編寫Data migrations

根據我的經驗,最好是生成多個遷移;一個創建一個新的CharField,然後通過RunPython寫入這個新列。然後,運行第二次遷移,刪除原始IntegerField並將新CharField列重命名爲原始列。 (我想這是你自己的建議)

0

爲了使它更清楚,你需要移民3。

  1. 的架構遷移 - 增加一個新的領域。
  2. 數據遷移 - 您可以使用下面的鏈接,這是數據遷移的最佳示例。
  3. 用於模式遷移 - 刪除舊字段。

這是我做我的第一個數據遷移之前已經遵循的例子。

Data Migration Example