【问题标题】:Django migrations - change model from Int to CharField and pre-populate from choice optionDjango 迁移 - 将模型从 Int 更改为 CharField 并从选项选项中预填充
【发布时间】:2016-09-14 18:27:34
【问题描述】:

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

有没有办法我可以在迁移中做到这一点,或者创建一个新列,使用适当的值更新并删除旧列会更好?

【问题讨论】:

    标签: python django django-migrations


    【解决方案1】:

    您已经更改了 Schema,因此您肯定需要 Schema 迁移,Django 会使用 makemigrations 命令为您完成。

    但由于您还更改了列的类型,其中填充了整数并且现在应该转换为字符,Django 不会自动为您执行此操作,您需要编写 Data migrations

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

    【讨论】:

      【解决方案2】:

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

      1. 用于架构迁移 - 添加新字段。
      2. 用于数据迁移 - 您可以使用下面的链接,这是数据迁移的完美示例。
      3. 用于架构迁移 - 删除旧字段。

      这是我在进行第一次数据迁移之前所遵循的示例。

      Data Migration Example

      【讨论】:

        猜你喜欢
        • 2015-01-22
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多