【问题标题】:How to rename a foreign key in django-south, the right way如何在django-south中重命名外键,正确的方法
【发布时间】:2012-03-05 16:10:42
【问题描述】:

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

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

【问题讨论】:

    标签: django django-south


    【解决方案1】:

    更改字段名称并运行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')
    

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

    【讨论】:

    • 我在上面链接的线程中提到了该技​​术,我已经尝试过了。它似乎工作,不会抛出任何异常。但在它完成任何访问SomeModel.owner 的尝试后将引发DoesNotExist
    • 在 Postgres 中,这似乎适用于更改外键名称。约束名称保持不变……这有关系吗?
    猜你喜欢
    • 2011-03-29
    • 2011-02-21
    • 1970-01-01
    • 2011-03-15
    • 2011-11-21
    • 2011-09-05
    • 2023-03-14
    • 2013-04-19
    • 2014-08-22
    相关资源
    最近更新 更多