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
相关产品推荐
相关产品推荐

