我最近了解到Django's on_delete=CASCADE only emulates ON DELETE CASCADE -如果我运行DELETE FROM ParentTable
作为显式SQL,则在子表的行具有指向父表的活动外键时,它将失败。
为什么Django以这种方式设计?当它可以更轻松地将ON DELETE CASCADE
添加到数据库本身的表中时,为什么会在Python层中重现此行为?
答案 0 :(得分:0)
尽管我不属于他们的团队,但我认为Django开发人员以这种方式实现它的主要原因有两个。
1)兼容性
在ORM中实施这种机制是一种逻辑,因为它可以更轻松地支持多种数据库类型。
2)应用通知
通过实现自己的Cascade逻辑,他们可以知道何时以及如何在相关数据库中删除数据。这尤其与考虑Django的工作方式有关。