Django 1.9 在迁移中删除外键

标签 django foreign-keys database-migration django-1.9

我有一个 Django 模型,它有另一个模型的外键:

class Example(models.Model)
   something = models.ForeignKey(SomeModel, db_index=True)

我想将底层数据库列保留为字段,但要摆脱数据库中的外键约束。

因此模型将更改为:

class Example(models.Model):
   something_id = models.IntegerField() 

而且,需要明确的是,something_id 是 Django 为外键字段创建的列。

我不想删除该列并重新创建它(这就是当我在如上所述更改模型后自动生成迁移时 Django 所做的事情)。

我想保留该字段但是我想通过迁移删除数据库中的外键约束。我不清楚如何通过 Django 迁移来做到这一点 - 是否有一些内置支持,或者我是否必须运行一些原始 SQL,如果是这样,我如何以编程方式获取约束的名称?

最佳答案

这就是我设法做到这一点的方法,它基于上面 nimasmi 的答案:

class Migration(migrations.Migration):
    dependencies = [
        ('my_app', '0001_initial'),
    ]

    # These *WILL* impact the database!
    database_operations = [
        migrations.AlterField(
            model_name='Example',
            name='something',
            field=models.ForeignKey('Something', db_constraint=False, db_index=True, null=False)
        ),
    ]

    # These *WON'T* impact the database, they update Django state *ONLY*!
    state_operations = [
        migrations.AlterField(
            model_name='Example',
            name='something',
            field=models.IntegerField(db_index=True, null=False)
        ),
        migrations.RenameField(
            model_name='Example',
            old_name='something',
            new_name='something_id'
        ),
    ]

    operations = [
        migrations.SeparateDatabaseAndState(
            database_operations=database_operations,
            state_operations=state_operations
        )
    ]

关于Django 1.9 在迁移中删除外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311503/

相关文章:

database - 导入数据库后phpmyadmin md5解密问题

php - CodeIgniter : 3. 0 通过composer迁移数据库

python - 了解 Django 中的 View 评估

python - Django self.cleaned_data Keyerror

python - 如何在Django管理员中为关系字段设置初始值?

mysql - 错误: Cannot delete or update a parent row: a foreign key constraint fails

python - Django:相关模型中外键总计值的正确方法

python - 在 Python Django 中的后续请求之间保留变量的值

sql - 如何让一个外键指向两个主键?

java - 创建 jpa 表后进行 Flyway 迁移