假设我在 Django 中有这样的东西:
class PublicObject(models.Model):
class Meta:
abstract = True
title = models.CharField()
menu_link = models.ForeignKey('MenuLink')
class MenuLink(models.Model):
title = models.CharField()
parents = models.ManyToManyField('self')
class Page(PublicObject):
page fields...
class BlogEntry(PublicObject)
blog entry fields...
我想要的是当我删除一个页面或一个博客条目时,相应的菜单链接也将被删除。如何在不违反 DRY 原则的情况下在 Django 中做到这一点?我必须提一下: - 覆盖 ModelAdmin 的 model_delete 不起作用,因为该函数不会从 Django 的操作菜单中批量删除。- 使用 pre_delete 模型信号不起作用,因为它需要模型名称,但不适用于抽象模型名称。它仅适用于 sender=Page 或 sender=BlogEntry,不适用于 sender=PublicObject。如果我为所有型号注册此信号并简单地检查我的发件人是什么型号,我会受到很大的性能损失吗?