Django 模型 - 更改选择字段中的选项并迁移

标签 django django-models django-south django-migrations

我需要更改模型状态字段中选项的名称,该名称需要变为

   STATUS = Choices(
    ('option_A', 'Option A'),
    ('option_B', 'Option B'),
   )


在此更改之前,我有相同的选项,但名称不同。现在我更改了项目中的所有内容以尊重新名称,但问题在于更新数据库以显示这些新名称。我使用 South 进行数据迁移,据我所知,如果您需要在数据库中添加或删除列,让它编写自动迁移是相当简单的,但我找不到一种方法来对我的现有列。

我使用 Django 1.6。

最佳答案

您正在寻找的是数据迁移。

$ python manage.py datamigration your_app_label

这将在您的迁移文件夹中创建一个新的空白迁移。您必须手动创建 forwardsbackwards更改数据的方法:
def forwards(self, orm):
    orm.MyModel.objects.filter(status='old_option_A').update(status='option_A')
    ...

def backwards(self, orm):
    # reverse of forwards, or raise an error to prevent backwards migrations

您需要使用 orm.MyModel而不是直接导入模型以使其工作。

然后,只需运行迁移:
$ python manage.py migrate your_app_label

确保在版本控制系统的同一个提交中包含迁移和选项中的更改,因此这些将始终同步(只要人们记得在新版本上迁移)。

关于Django 模型 - 更改选择字段中的选项并迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27105783/

相关文章:

python - 为 Django 应用程序创建 REST API

django - 如何从 2456 这样的特定数字开始 Django 模型自动递增键?

python - 通过中介模型在 django 中创建与 AUTH_USER_MODEL 的多对多关系

python - Django 南 : access model's __unicode__() method

python - Django ForeignKey _set 在继承的模型上

python - 使用自定义字段扩展 Django 的 ManyToManyField

Django South的替代品?

django - 使用 South/Selenium 进行 Django 测试的装置

python - Django OAuth 工具包 - 注册用户

django - 如何覆盖 Django 可重用应用程序的模型?