【问题标题】:Dropping a foreign key constraint in Django在 Django 中删除外键约束
【发布时间】:2015-06-11 09:38:13
【问题描述】:

我有两张桌子:

class Foo(models.Model):
    pass

class Bar(models.Model):
    foobar = models.ForeignKey(Foo, unique=True)
    barfoo = models.ForeignKey(Foo, unique=True)

验证确保永远不会有既是 foobar 又是 barfooFoo。我需要删除Bar 模型和所有Foos 是barfoos。我的方法是从Bar.barfoo 中删除外键约束,运行一些SQL 删除所有Foos 是barfoo,然后删除模型。不过,我似乎在 django 迁移文档中找不到任何用于删除 Django 动态生成的外键约束的内容。想法?

【问题讨论】:

  • 没有得到任何响应,我通过将foobar_id 复制到一个临时整数字段然后完全删除外键字段来实施解决方法。有一个更直接的解决方案仍然很好。

标签: python django postgresql django-migrations


【解决方案1】:

创建一个删除 'foobar' 并更改 'barfoo' 添加 CASCADE DELETION 行为的迁移。运行此迁移,删除数据库中的所有 Bar 对象,最后从模型文件中删除 Bar 模型并生成新的迁移。

确保您的模型上没有任何通用外键(否则您将在 django_contenttypes 表上获得陈旧数据)。

就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2020-12-19
    • 2017-04-20
    相关资源
    最近更新 更多