Django迁移 - 将模型从Int更改为CharField,并从选项选项中预先填充

时间:2016-09-14 18:27:34

标签: python django django-migrations

在模型中,我有IntegerField映射到CHOICES元组。该字段的要求已更改为更新该元组中的选项需要过于频繁的维护,因此我决定将其更改为CharField

我是否可以在迁移中执行此操作,或者创建新列,使用适当的值进行更新并删除旧列更好?

2 个答案:

答案 0 :(得分:1)

您已经更改了Schema,因此您肯定需要一个Schema迁移,Django将使用makemigrations命令为您执行此操作。

但是既然你也在改变一个列的类型,其中填充了整数,现在应该转换成字符,Django不会自动为你做这个,你需要写Data migrations

根据我的经验,最好生成多次迁移;一个创建一个新的CharField,然后通过RunPython写入这个新列。然后,运行第二次迁移,删除原始IntegerField,并将新CharField列重命名为原始列。 (我猜这是你自己建议的)

答案 1 :(得分:0)

为了更清楚,您需要进行3次迁移。

  1. 用于架构迁移 - 添加新字段。
  2. 用于数据迁移 - 您可以使用下面的链接,这是数据迁移的完美示例。
  3. 用于架构迁移 - 删除旧字段。
  4. 以下是我在进行首次数据迁移之前所遵循的示例。

    Data Migration Example