python - 从带有选项的 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)
如果我通过运行来做到这一点makemigrations
,migrate
我会丢失数据库中的现有数据。
如何在不丢失数据库中现有数据的情况下进行此(和类似的)迁移?
理想情况下,我会在迁移本身中执行此操作,这样它就会在我们使用该migrate
命令的第二次在生产服务器上运行。
解决方案
您将需要数据迁移(正如我最近在此答案中概述的那样:如何修改已经在数据库中迁移的模型?),但步骤是:
- 重命名
gender
为gender_integer
(或类似);从中进行迁移 - 添加新
gender
字段;从中进行迁移 - 创建数据迁移以将
gender_integer
的内容映射到gender
(请参阅上面的链接) - 删除
gender_integer
;从中进行迁移。
推荐阅读
- java - 如何从 Geocoder 获取城市名称?
- python - 2 输出 CNN,第 2 输出的训练基于第 1 输出
- python - Python2:使用 scipy.optimize.curve_fit 拟合函数的多参数总和
- php - Codeigniter 路由在分页和其他 URL 上发生冲突
- css - 如何在 bg 图像和导航栏旁边包含表单
- html - 没有通过 VBA 选择 HTML 中的第二个下拉菜单
- jmeter - JMeter 和浏览器中不同的带宽利用率
- java - 只显示 org.springframework.data.domain.Page 的内容,没有元数据
- animation - Lottie 动画没有播放到最后。怎么修?
- python - 在 for 循环中分配新列时将标题名称分配给熊猫数据框的优雅方法?