在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
引用的。如果我用上面的线手动替换它一切正常。
知道为什么会这样吗?
答案 0 :(得分:5)
因为Django模拟了应用程序层中的on_delete子句。我相信它会这样做,所以它仍然可以提供删除信号之类的东西。
on_delete
的{{1}}属性指示Django做什么,它不会直接转换为数据库构造语句。
另请参阅:https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.DO_NOTHING