首页 > 解决方案 > 从带有选项的 IntegerField 迁移到 CharField

问题描述

在 Django 中,我有一个具有以下 IntegerField 的模型。

GENDER_CHOICES = (
    (0, 'Male'),
    (1, 'Female'),
)
gender = models.IntegerField(choices=GENDER_CHOICES)

我想祭坛这个模型成为一个 CharField 使用的选择。

GENDER_CHOICES = (
    ("MALE", 'Male'),
    ("FEMALE", 'Female'),
    ("NA", 'Id Rather Not Say'),
)
gender = models.CharField(choices=GENDER_CHOICES, max_length=10)

如果我通过运行来做到这一点makemigrationsmigrate我会丢失数据库中的现有数据。

如何在不丢失数据库中现有数据的情况下进行此(和类似的)迁移?

理想情况下,我会在迁移本身中执行此操作,这样它就会在我们使用该migrate命令的第二次在生产服务器上运行。

标签: pythondjango

解决方案


您将需要数据迁移(正如我最近在此答案中概述的那样:如何修改已经在数据库中迁移的模型?),但步骤是:

  • 重命名gendergender_integer(或类似);从中进行迁移
  • 添加新gender字段;从中进行迁移
  • 创建数据迁移以将gender_integer的内容映射到gender(请参阅上面的链接)
  • 删除gender_integer;从中进行迁移。

推荐阅读