【发布时间】:2016-09-14 18:27:34
【问题描述】:
在模型中,我有一个映射到 CHOICES 元组的 IntegerField。该字段的要求已更改为更新该元组中的选项将需要过于频繁的维护,因此我决定将其更改为CharField
有没有办法我可以在迁移中做到这一点,或者创建一个新列,使用适当的值更新并删除旧列会更好?
【问题讨论】:
标签: python django django-migrations
在模型中,我有一个映射到 CHOICES 元组的 IntegerField。该字段的要求已更改为更新该元组中的选项将需要过于频繁的维护,因此我决定将其更改为CharField
有没有办法我可以在迁移中做到这一点,或者创建一个新列,使用适当的值更新并删除旧列会更好?
【问题讨论】:
标签: python django django-migrations
您已经更改了 Schema,因此您肯定需要 Schema 迁移,Django 会使用 makemigrations 命令为您完成。
但由于您还更改了列的类型,其中填充了整数并且现在应该转换为字符,Django 不会自动为您执行此操作,您需要编写 Data migrations。
根据我的经验,最好生成多个迁移;一个创建一个新的 CharField,然后通过 RunPython 写入这个新列。然后,运行第二次迁移,删除原始 IntegerField 并将新的 CharField 列重命名为原始列。 (我猜这是你自己建议的)
【讨论】:
为了更清楚,您需要 3 次迁移。
这是我在进行第一次数据迁移之前所遵循的示例。
【讨论】: