gpt4 book ai didi

django - Django 中实现的 ON DELETE CASCADE 逻辑在哪里? (使用的是PostgreSQL)

转载 作者:行者123 更新时间:2023-12-04 04:19:07 29 4
gpt4 key购买 nike

我只需要在 上确认我的理解Django 对 ON DELETE CASCADE 的实现 来自 Django 专家。

根据 Django 官方文档:

When Django deletes an object, by default it emulates the behavior of the SQL constraint ON DELETE CASCADE -- in other words, any objects which had foreign keys pointing at the object to be deleted will be deleted along with it.



做词 “模拟”暗示 ON DELETE CASCADE 逻辑实际上是在 Django 中实现的,而不是在数据库级别实现的? (我查看了我的数据库,所有包含外键的表的定义中都有 ON DELETE NO ACTION。)

如果我的理解是正确的,有什么方法可以将 ON DELETE CASCADE 逻辑从应用层重新定位到数据库层?我更在寻找这样做的正确方法,而不是黑客。 (注意:我使用 PostgreSQL 作为我的后端。)

最佳答案

如果问相关代码是在哪里实现的:可以找到here .

在应用程序/ORM 层中实现 CASCADE-DELETE 逻辑是有意义的,因为这使应用程序能够在删除发生时得到通知(例如,为已删除的实例触发 Django 的删除信号),此外,这是启用此功能的明智方法不同类型的数据库。

如果您担心数据的完整性:如果您的数据库支持,Django 仍会设置外键约束(例如检查 Postgresql)。所以你的数据库不会让你删除外键指向的任何行。

自己试试:

> DELETE FROM accounts_publisher WHERE id=5;
ERROR: update or delete on table "accounts_publisher" violates foreign key constraint "accounts_publisher_id_411559b18a178e73_fk_accounts_publisher_id" on table "accounts_membership"
DETAIL: Key (id)=(5) is still referenced from table "accounts_membership".

关于django - Django 中实现的 ON DELETE CASCADE 逻辑在哪里? (使用的是PostgreSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712691/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com