从带有选项的整数字段迁移到字符字段

2024-04-23 17:44:32 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django中,我有一个带有以下整型字段的模型

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命令时,迁移将在生产服务器上运行


Tags: 数据django模型数据库models情况migrategender
3条回答

首先,您可以存储旧字段,并使用新选项将新字段添加到模型中。之后,您可以运行独立代码并将旧数据映射到新字段

您需要进行数据迁移(正如我最近在回答中所述:How to modify a models who's already migrated in Database?),但步骤如下:

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

迁移1:创建一个类似于gender_tmp的char字段,将所有数据迁移到其中

迁移2:删除gender并将gender_tmp重命名为gender

相关问题 更多 >