我需要更改模型状态字段中选项的名称,该名称需要变为
STATUS = Choices( ('option_A', 'Option A'), ('option_B', 'Option B'), )
在此更改之前,我有相同的选项,但名称不同。现在我更改了项目中的所有内容以尊重新名称,但问题在于更新数据库以显示这些新名称。我使用 South 进行数据迁移,据我所知,如果您需要在数据库中添加或删除列,让它编写自动迁移是相当简单的,但我找不到一种方法来对我的现有列。
我使用 Django 1.6。
最佳答案
您正在寻找的是数据迁移。
$ python manage.py datamigration your_app_label
这将在您的迁移文件夹中创建一个新的空白迁移。您必须手动创建
forwards
和 backwards
更改数据的方法: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/