在django中,如何在删除某种类型的实例时删除所有相关对象?

dem*_*ock 2 python django

我首先尝试覆盖delete()方法,但这对QuerySet的批量删除方法不起作用.它应该与pre_delete信号有关,但我无法弄明白.我的代码如下:

def _pre_delete_problem(sender, instance, **kwargs):
    instance.context.delete()
    instance.stat.delete()
Run Code Online (Sandbox Code Playgroud)

但是这个方法似乎被无限调用,程序运行成死循环.有人可以帮帮我吗?

Has*_*sek 7

如果类具有外键(或相关对象),则默认情况下将其删除,如DELETE CASCADEin sql.

您可以在类中on_delete定义时使用参数更改行为ForeignKey,但默认情况下是CASCADE.您可以在此处查看文档.

现在pre_delete信号有效,但delete()如果您使用批量删除,它不会调用该方法,因为它不是逐个对象地删除.