我的delete
上有一个自定义Model
方法,我确保在使用以下方法调用QuerySet上的delete
时正确调用:
Custom delete method on queryset。
当Django执行级联删除时,这似乎不起作用。在这种情况下,ORM会在常规_raw_delete
上调用QuerySet
,从而绕过我的自定义删除方法。
如何防止这种情况发生?
这个问题似乎是因为它使用了_base_manager
而不是_default_manager
:
def related_objects(self, related, objs):
return related.related_model._base_manager.using(self.using).filter(
**{"%s__in" % related.field.name: objs}
)
答案 0 :(得分:1)
看起来我需要将其添加到QuerySet
:
def _raw_delete(self, using):
self.delete()
_raw_delete.alters_data = True
并在use_for_related_fields = True
上设置Manager
。