我有一个模拟xml应答器的混合和树状结构的应用程序。
我的第一个模型IdBalise用于将父母与孩子联系起来。它与不同的balise模型与GenericForeignKey链接:
class IdBalise(models.Model):
idBalise=models.AutoField(primary_key=True)
parent = models.ForeignKey('IdBalise', on_delete=models.CASCADE, related_name="parentbal", null=True, blank=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
我使用了许多类似下面的balise模型:
class BiblBalise(Balise):
idbal = GenericRelation(IdBalise, content_type_field="content_type", object_id_field="object_id", on_delete=models.CASCADE)
baliseName='bibl'
为了在删除IdBalise时删除应答器内容,我覆盖了IdBalise的删除方法:
def delete(self):
self.content_object.delete()
super(IdBalise, self).delete()
完美无缺。当我删除IdBalise时,其相关内容(例如,BiblBalise中的条目)将被删除。
我的问题是,当我删除父母时,孩子的内容不会删除。由于“父”字段上的on_delete = models.CASCADE,子IDB删除被删除。但是他们的内容(例如,BiblBalise中的条目)不会被删除。
为什么删除子IDBalise后,我的覆盖删除方法不起作用?有什么想法吗?
由于
答案 0 :(得分:0)
最新答案,但我正在寻找相同的问题,并注意到Django documentation说:
在批量操作中不会调用覆盖的模型方法
请注意,使用QuerySet批量删除对象或由于级联删除而导致未必调用对象的 delete()方法。为了确保执行自定义的删除逻辑,您可以使用 pre_delete 和/或 post_delete 信号。
不幸的是,批量创建或更新对象时没有解决方法,因为没有调用save(),pre_save和post_save。
因此基本上,您应该使用pre_delete
的信号处理程序。