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

时间:2014-04-22 18:57:59

标签: python django inheritance django-admin

我有一个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

一般来说,我想显示作者列出的信息,并按照某些信息排序,例如pub_date,以便最终用户看到类似的内容:

作者A:

  • 诗1
  • 诗2
  • 第1册
  • 诗3
  • 第2册

作者B:

  • 第1册
  • 第2册
  • 诗1
  • 诗2
  • 第3册

等等。我可以弄清楚如何在前端显示这些(我可以使用django-polymorphic或简单地将author.book_set.all()和author.poem_set.all()组合成一个列表并排序)。但我无法弄清楚如何在管理站点中实现这一点。我希望结构与上面完全相同 - 这样当我点击作者A时我会得到:

  • inline for Poem 1
  • inline for Poem 2
  • 内联第1册
  • 内容为诗3
  • 内联第2册

如果我只是简单地将诗歌和书籍作为TabularInlines附加,它们将被分成单独的字段集,如下所示:

  • inline for Poem 1
  • inline for Poem 2
  • 内容为诗3

  • 内联第1册

  • 内联第2册

但是我觉得功能很重要,它们在一个字段集中混合在一起(其他子类的特定字段会变灰或者每个内联都不存在)。有谁知道如何实现这个?

1 个答案:

答案 0 :(得分:7)

好吧,似乎没有一种简单的方法可以做到这一点,所以我深入研究了django.contrib并构建了一个应用程序来处理这个:Django Merged Inlines。如果它对任何人都有用,可以在这里找到:

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