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

goz*_*lli 3 python django postgresql cascade foreign-keys

在Django,我有一个模型:

class HmmInsectValue(models.Model):
    hmm = models.ForeignKey('HmmResult', on_delete=models.CASCADE)
    ...
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL数据库(9.3.2)上,这会产生一个约束:

FOREIGN KEY (hmm_id) REFERENCES devdash_hmmresult(id) DEFERRABLE INITIALLY DEFERRED
Run Code Online (Sandbox Code Playgroud)

而我真正想要的是:

FOREIGN KEY (hmm_id) REFERENCES devdash_hmmresult(id) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)

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

知道为什么会这样吗?

Xea*_*lot 6

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

指示Django做什么的on_delete属性ForeignKey,它不直接转换为数据库构造语句.

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