2010-12-30 8 views
8

Ho iniziato a utilizzare il framework django solo pochi giorni fa e ho un disperato bisogno di aiuto con la mia applicazione.django display content of a manytomfieldfield

Consiste in classi di pagamento client, progetto, admin e admin in cui il pagamento admin_payment conserva gli ID degli amministratori e dei progetti, tra le altre cose.

La mia domanda è come posso visualizzare il "nome dell'amministratore" di ciascun "progetto" nel mio elenco di progetti admin? la classe di progetto stesso non detiene gli ID di amministratore (l'Admin_Payment fa)

Attualmente ho la seguente struttura: (strisce in basso)

models.py

class Admin(models.Model): 
    admin_name = models.CharField(unique = True, blank = False, null = False, max_length = 128, verbose_name = u'admin full name') 

    def __unicode__(self): 
     return self.admin_name 
    class Meta: 
     ordering = ('id',) 
     verbose_name = u'Admin Info' 

class Project(models.Model): 
    client = models.ForeignKey(Client, verbose_name = u'Client') 
    description = models.ForeignKey(Description, verbose_name = u'project description') 
    admins = models.ManyToManyField(Admin, verbose_name = u'Administrators', through = 'Admin_Payment') 

class Admin_Payment(models.Model): 
    admin = models.ForeignKey(Admin, verbose_name = u'Administrator') 
    project = models.ForeignKey(Project, verbose_name = u'project') 

admin.py (strisce giù)

class AdminInline(admin.TabularInline): 
    model = Admin 

class ProjectAdmin(admin.ModelAdmin): 
    radio_fields = {'position': admin.HORIZONTAL, 'solution': admin.HORIZONTAL} 
    inlines = [AdminInline, ] 
    list_display = ['client','description','admin_name'] 

clienti e descrizioni vengono visualizzati correttamente in progetto di quotazione, ma i nomi di amministrazione non sono

ogni aiuto è apprezzato (scusate se ho postato tutto ciò che pretende molto senso, io sono un novizio in pitone e Django)

risposta

28

Visualizzazione il contenuto del ManyToMany campo non è supportata di default da Django, perché il database verrà interrogato per ogni riga dei risultati. È possibile visualizzare voi stessi da adding a method to your Project-model:

class Project(models.Model): 
    .... 
    def admin_names(self): 
     return ', '.join([a.admin_name for a in self.admins.all()]) 
    admin_names.short_description = "Admin Names" 

e mettere admin_names nei vostri list_display campi!

+0

Ha funzionato molto bene. Qualche idea su come posso aggiungere un filtro per ogni amministratore? – Thordin9

+0

capito. grazie ancora – Thordin9

+0

è possibile aggiungere un verbose_name al valore restituito? – Thordin9