让我们说我在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。如果我为所有型号注册此信号并且只是检查我的发件人是什么型号,我会受到很大的性能损失吗?
答案 0 :(得分:0)
我可以建议两种解决方案。
为什么不应该覆盖PublicObject.delete
?
您可以考虑另一种关系模型:
class PublicObject(models.Model):
class Meta:
abstract = True
title = models.CharField()
class MenuLink(models.Model):
title = models.CharField()
parents = models.ManyToManyField('self')
public_obj = models.ForeignKey('PublicObject')