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

Python Django迁移-将模型从Int更改为CharField,并从choice选项预填充,python,django,django-migrations,Python,Django,Django Migrations,在模型中,我有一个整型字段,它映射到选项元组。该字段的要求已更改为更新该元组中的选项将需要太频繁的维护,因此我决定将其更改为CharField 是否有一种方法可以在迁移中实现这一点,或者创建一个新列、使用适当的值更新并删除旧列更好?您已经更改了架构,因此您肯定需要架构迁移,Django将使用makemigrations命令为您实现这一点 但是,由于您也在更改列的类型,其中填充了整数,现在应该转换为字符,Django不会自动为您这样做,您需要编写 根据我的经验,最好生成多个迁移;创建一个新的Cha

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


是否有一种方法可以在迁移中实现这一点,或者创建一个新列、使用适当的值更新并删除旧列更好?

您已经更改了架构,因此您肯定需要架构迁移,Django将使用
makemigrations
命令为您实现这一点

但是,由于您也在更改列的类型,其中填充了整数,现在应该转换为字符,Django不会自动为您这样做,您需要编写


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

为了更清楚地说明这一点,您需要进行3次迁移

  • 对于架构迁移-添加新字段
  • 对于数据迁移-您可以使用下面的链接,这是数据迁移的完美示例
  • 对于架构迁移-删除旧字段
  • 这是我在执行第一次数据迁移之前遵循的示例