关于删除级联的Django没有在PostgreSQL中产生正确的约束

时间:2014-02-21 00:47:31

标签: python django postgresql foreign-keys cascade

在Django中,我有一个模型:

class HmmInsectValue(models.Model):
    hmm = models.ForeignKey('HmmResult', on_delete=models.CASCADE)
    ...

在PostgreSQL数据库(9.3.2)上产生约束:

FOREIGN KEY (hmm_id) REFERENCES devdash_hmmresult(id) DEFERRABLE INITIALLY DEFERRED

而我真正想要的是:

FOREIGN KEY (hmm_id) REFERENCES devdash_hmmresult(id) ON DELETE CASCADE

这会破坏我的代码,因为当我尝试删除HmmResult条目时,它会抱怨它仍然是从HmmInsectValue引用的。如果我用上面的线手动替换它一切正常。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

因为Django模拟了应用程序层中的on_delete子句。我相信它会这样做,所以它仍然可以提供删除信号之类的东西。

on_delete的{​​{1}}属性指示Django做什么,它不会直接转换为数据库构造语句。

另请参阅:https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.DO_NOTHING