Django管理 - 在单一管理界面中混合多个模型内联
我有一个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。如果对谁有用的话,可以在这里找到: