在模型中,我有一個IntegerField
映射到CHOICES
元組。該字段的要求已經改變,更新該元組中的選項將需要過於頻繁的維護,所以我決定將其更改爲CharField
Django遷移 - 將模型從Int更改爲CharField並從選項中預填充
有沒有一種方法可以在遷移中執行此操作,或者創建一個新的列,更新適當的值並刪除舊的列會更好嗎?
在模型中,我有一個IntegerField
映射到CHOICES
元組。該字段的要求已經改變,更新該元組中的選項將需要過於頻繁的維護,所以我決定將其更改爲CharField
Django遷移 - 將模型從Int更改爲CharField並從選項中預填充
有沒有一種方法可以在遷移中執行此操作,或者創建一個新的列,更新適當的值並刪除舊的列會更好嗎?
您改變了架構,所以你一定需要一個架構遷移和Django會爲你做的,用makemigrations
命令。
但是由於您也在更改列的類型,其中填充整數,現在應該轉換爲字符,Django不會爲您自動執行此操作,因此您需要編寫Data migrations。
根據我的經驗,最好是生成多個遷移;一個創建一個新的CharField,然後通過RunPython寫入這個新列。然後,運行第二次遷移,刪除原始IntegerField並將新CharField列重命名爲原始列。 (我想這是你自己的建議)
爲了使它更清楚,你需要移民3。
這是我做我的第一個數據遷移之前已經遵循的例子。