为什么Django只模仿ON DELETE CASCADE?

时间:2018-06-22 15:38:26

标签: sql django django-models foreign-keys cascade

我最近了解到Django's on_delete=CASCADE only emulates ON DELETE CASCADE -如果我运行DELETE FROM ParentTable作为显式SQL,则在子表的行具有指向父表的活动外键时,它将失败。

为什么Django以这种方式设计?当它可以更轻松地将ON DELETE CASCADE添加到数据库本身的表中时,为什么会在Python层中重现此行为?

1 个答案:

答案 0 :(得分:0)

尽管我不属于他们的团队,但我认为Django开发人员以这种方式实现它的主要原因有两个。

1)兼容性

在ORM中实施这种机制是一种逻辑,因为它可以更轻松地支持多种数据库类型。

2)应用通知

通过实现自己的Cascade逻辑,他们可以知道何时以及如何在相关数据库中删除数据。这尤其与考虑Django的工作方式有关。