2012-08-13 11 views
12

Vorrei visualizzare il nome utente del modello di interfaccia Django Admin ma non molto sicuro di come farlo ..Visualizzazione della model's__unicode__ in Django Admin

The models.py: 

    class Adult(models.Model):  
     user = models.OneToOneField(User) 
     fullname = models.CharField(max_length=100, 
            blank=True) 
     def __unicode__(self): 
      return self.user.username 

Admin.py: 

    class AdultAdmin(admin.ModelAdmin): 
     list_display = ('??', 'Student_Name',) 
     search_fields = ['??',] 

    admin.site.register(Adult, AdultAdmin) 

Che cosa si deve andare all'interno del ?? sopra ? Vorrei visualizzare l'unicode o self.user.username? Come lo faccio? Hai bisogno di una guida ...

+0

Aggiungere '__unicode__', e' Student_Name' non è parte di quel modello; a meno che tu non l'abbia incluso. –

risposta

29

Dal list_display documentation ci sono quattro cose che si possono aggiungere lì:

  1. Un campo
  2. Alcuni metodo (un callable) che accetta una variabile che è l'istanza per il quale il riga viene visualizzata.
  3. Una stringa che è il nome di un metodo o attributo definito nella classe del modello.
  4. Una stringa che è il nome di un metodo definito in ModelAdmin.

Per il vostro caso abbiamo bisogno di # 3 per list_display.

Per search_fields è più facile in quanto è possibile utilizzare la notazione follow (__) per effettuare le ricerche.

Alla fine abbiamo messo a punto questo:

class AdultAdmin(admin.ModelAdmin): 
    list_display = ('__unicode__', 'Student_Name',) 
    search_fields = ['user__username'] 
+0

una domanda: sia __unicode__ che user_username devono essere usati insieme allo stesso tempo per essere efficaci? – lakesh

+0

Dipende da cosa si vuole fare, perché uno è per la ricerca e l'altro controlla quali attributi sono mostrati nella vista elenco. –

+0

puoi anche aggiungere dopo --unicode-- dichiarazione del metodo: --unicode -. Short_description = 'nome studente' – madzohan