Django管理 - 在单一管理界面中混合多个模型内联

15 投票
1 回答
3403 浏览
提问于 2025-04-18 03:47

我有一个Django模型的布局,大概是这样的:

class Author(models.Model):
    name = models.CharField(max_length=50, unique=True)

class Publication(models.Model):
    author = models.ForeignKey(Author)        

    #Some shared fields

    class Meta:
        abstract = True

class Book(Publication):
    #Book specific fields

class Poem(Publication):
    #Poem specific fields

总的来说,我想按作者来展示信息,并根据一些信息(比如出版日期)进行排序,这样最终用户看到的内容会是这样的:

作者A:

  • 诗歌1
  • 诗歌2
  • 书籍1
  • 诗歌3
  • 书籍2

作者B:

  • 书籍1
  • 书籍2
  • 诗歌1
  • 诗歌2
  • 书籍3

依此类推。我能搞定如何在前端展示这些内容(我可以使用django-polymorphic,或者简单地把author.book_set.all()和author.poem_set.all()合并成一个列表再排序)。但是我就是搞不定如何在管理后台实现这个功能。我希望结构和上面完全一样——这样当我点击作者A时,我能看到:

  • 诗歌1的内联
  • 诗歌2的内联
  • 书籍1的内联
  • 诗歌3的内联
  • 书籍2的内联

如果我只是把诗歌和书籍作为TabularInlines添加,它们会被分开到不同的字段组里,像这样:

  • 诗歌1的内联
  • 诗歌2的内联
  • 诗歌3的内联

  • 书籍1的内联

  • 书籍2的内联

但我觉得把它们混在一个字段组里是很重要的(其他子类特有的字段要么变灰,要么在每个内联中不出现)。有没有人知道怎么实现这个?

1 个回答

10

嗯,看起来没有简单的方法来做到这一点,所以我稍微研究了一下django.contrib,自己做了一个应用程序来处理这个问题:Django Merged Inlines。如果对谁有用的话,可以在这里找到:

https://github.com/MattBroach/Django-Merged-Inlines

撰写回答