2014-04-22 11 views
11

Ich habe ein Layout Django-Modell, das etwa wie folgt aussieht:Django Admin - Mischen mehrerer Modell inlines in einzelnen Admin-Interface

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 

Allgemein gesprochen, ich möchte Informationen von Autor gelistet zeigen und von einigen sortiert Informationen, wie pub_date, so dass der Endbenutzer sehen würde, so etwas wie:

Autor A:

  • Poem 1
  • Poem 2
  • Buch 1
  • Gedicht 3
  • Buch 2

Autor B:

  • Buch 1
  • Buch 2
  • Poem 1
  • Poem 2
  • Buch 3

Und so weiter. Ich kann herausfinden, wie diese am Front-End angezeigt werden (ich kann entweder django-polymorph oder einfach die author.book_set.all() und author.poem_set.all() in einer einzigen Liste kombinieren und sortieren). Aber ich kann nicht herausfinden, wie man das in der Admin-Site implementiert. Ich würde die Struktur wie genau wie oben gleich zu sein - so dass, wenn ich auf Autor A klicken würde ich bekommen:

  • inline für Poem 1
  • inline für Poem 2
  • inline für Buch 1
  • inline für Poem 3
  • inline für Buch 2

Wenn ich einfach Poem und Buch als TabularInlines befestigen, würden sie ausgesondert in separate Fieldset werden, wie so:

  • inline für Poem 1
  • inline für Poem 2
  • inline für Poem 3

  • inline zum Buch 1

  • inline für Book 2

Aber ich denke, es ist wichtig für die Funktionalität, dass sie in einem einzigen Feld zusammengefügt werden et (wobei die Felder, die für die andere Kindklasse spezifisch sind, entweder ausgegraut oder nicht für jedes Inline-Element vorhanden sind). Hat jemand eine Idee, wie man das umsetzt?

Antwort

7

Nun, es schien nicht so, als ob es einen einfachen Weg gäbe, also habe ich mich ein bisschen in django.contrib vertieft und eine App für den Umgang damit erstellt: Django Merged Inlines.Wenn es für irgendjemanden nützlich wäre, ist es hier verfügbar:

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

Verwandte Themen