2014-04-22 226 views
11

我有一个看起来像这样一个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 

一般来说,我想显示按作者列出,分类信息被一些信息,如PUB_DATE,从而使最终用户将看到:

作者答:

  • 诗1
  • 诗2
  • 书1
  • 诗3
  • 书2

作者B:

  • 书1
  • 书2
  • 诗1
  • 诗2
  • Book 3

等等。我可以弄清楚如何在前端显示这些内容(我可以使用django-polymorphic或将author.book_set.all()和author.poem_set.all()简单地组合到一个列表中并进行排序)。但我无法弄清楚如何在Admin站点实现这个功能。我想的结构完全相同如上 - 这样,当我点击一个作者我会得到:

  • 内嵌的诗1
  • 内嵌的诗2
  • 内嵌的书1
  • 直列为诗3
  • 直列为书2

如果我只是将诗和簿作为TabularInlines,它们将被分离成单独的字段集,如所以:

  • 直列为诗1
  • 直列为诗2
  • 直列为诗3

  • 直列用于预订1

  • 直列为书2

但我认为它们在单一领域混合在一起的功能很重要et(对于每个内联,特定于其他子类的字段都变灰或不存在)。有没有人有任何想法如何实现这一点?

回答

7

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

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