0

假设我在 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。如果我为所有型号注册此信号并简单地检查我的发件人是什么型号,我会受到很大的性能损失吗?

4

1 回答 1

0

我可以建议两个解决方案。

  1. 你为什么不应该覆盖PublicObject.delete

  2. 您可以考虑另一种关系模型:

    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')
    
于 2012-12-02T13:39:50.790 回答