如何以正确的方式重命名django-south中的外键

时间:2012-03-05 16:10:43

标签: django django-south

我需要使用南迁移重命名我的django模型中的外键。当我找到这个帖子时,我以为我很幸运How to rename a foreignkey field with South?但是,那里描述的所有方法都失败了,有各种错误。有人确实知道这样做的正确方法吗?

我想将SomeModel.registered_to = models.ForeignKey( User )重命名为SomeModel.owner = models.ForeignKey( User ),并保持Userowner之间的关系。任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:3)

更改字段名称并运行python manage.py schemamigration --auto yourapp。 South将添加代码以删除列并添加新列。让South生成迁移可确保正确冻结ORM,因此您只需将实际迁移更改为重命名而不是删除和添加。只需从向前和向后迁移中删除这些行,然后将其替换为:

def forwards(self, orm):
    db.rename_column('yourapp_yourmodel', 'registered_to_id', 'owner_id')

def backwards(self, orm):
    db.rename_column('yourapp_yourmodel', 'owner_id', 'registered_to_id')

保存,然后迁移您的应用。