You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模型中on_delete=models.PROTECT与CASCADE的作用分别是什么?

Django中on_delete=models.CASCADE与on_delete=models.PROTECT的区别

嗨,这两个选项的功能完全不一样哦,我给你详细拆解下:

  • on_delete=models.CASCADE:这就是你之前用的那个逻辑——当父模型的条目被删除时,所有关联它的子模型条目会被自动级联删除。举个实际例子:假设你有一个Author模型,还有一个外键关联它的Book模型,当你删除某个作者时,所有属于这个作者的书籍会被一起删掉,不用你手动去清理关联数据。

  • on_delete=models.PROTECT:这个选项是用来“保护”父数据的。如果父模型的条目还有关联的子条目存在,你尝试删除父条目时,Django会直接抛出ProtectedError异常,阻止你删除操作。还是用上面的例子:如果某个作者还有未删除的书籍,你想删这个作者是删不掉的,必须先把所有关联的书籍都处理掉,才能删除该作者。

简单总结下:
CASCADE是「父删子随删」,适合需要自动清理关联数据的场景;PROTECT是「子在父不能删」,适合避免误删重要核心数据的场景,二者逻辑完全相反。

内容的提问来源于stack exchange,提问作者Mr Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:56:59