2013-04-03 15 views
6

Sto costruendo un'app Web che tiene traccia di ciò che i libri della biblioteca controllano. Ho i seguenti modelli:DJANGO: Come list_display un attributo di chiave esterna inversa?

class Person(models.Model): 
    name = models.CharField(max_length=100) 
    def __unicode__(self): 
     return self.name 

class Book(models.Model): 
    name = models.CharField(max_length=100) 
    person = models.ForeignKey(Person) 
    checkout_date = models.DateTimeField('checkout date') 
    def __unicode__(self): 
     return self.name 

nella pagina di Admin "lista cambiamento" per una persona, vorrei mostrare ciò che i libri che la persona ha. È qualcosa che può essere fatto? Se é cosi, come?

admin.py

class BookAdmin(admin.ModelAdmin): 
    list_display = ('name', 'checkout_date', 'person') 

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('name', 'book__name') 

risposta

13

L'amministratore di Django è davvero flessibile, puoi semplicemente aggiungere un metodo di supporto per questo.

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('name', 'books') 

    def books(self, obj): 
     return ",".join([k.name for k in obj.book_set.all()]) 
3

Aggiungi un inlinemodel admin

class BookInline(admin.TabularInline): 
    model = book 

class PersonAdmin(admin.ModelAdmin): 
    inlines = [BookInline, ] 

Questo dovrebbe coprirlo.

+0

Penso che questo non possa essere utilizzato per "list_display". Questo è per l'elenco in linea. –

Problemi correlati