2012-08-13 12 views
12

Ich möchte das Modell der Benutzernamen in Django Admin-Oberfläche angezeigt werden, aber nicht sehr sicher, wie es zu tun ..Anzeige der 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) 

Was im Inneren der gehen sollte ?? über ? Ich möchte den Unicode oder den self.user.username anzeigen? Wie mache ich es? Benötigen Sie einige Hinweise ...

+0

hinzufügen '__unicode__' und' Student_Name' nicht Teil dieses Modells ist; es sei denn, du hast es nicht aufgenommen. –

Antwort

29

Vom list_display documentation es vier Dinge sind, können Sie es hinzufügen:

  1. Ein Feld
  2. Einige Verfahren (a aufrufbar), die eine Variable akzeptiert, dass die Instanz, für die der Zeile wird angezeigt.
  3. Eine Zeichenfolge, die den Namen einer in der Modellklasse definierten Methode oder eines definierten Attributs angibt.
  4. Ein String, der der Name einer Methode ist, die in ModelAdmin definiert ist.

Für Ihren Fall benötigen wir # 3 für list_display.

Für search_fields ist es einfacher, wie Sie folgen können Notation (__), um Nachschlagewerke zu tun.

Am Ende haben wir mit diesem kommen:

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

eine Frage: müssen beide __unicode__ und user_username gleichzeitig zusammen verwendet werden, um effektiv zu sein? – lakesh

+0

Hängt davon ab, was Sie tun möchten, denn einer ist für die Suche und der andere steuert, welche Attribute in der Listenansicht angezeigt werden. –

+0

auch Sie können nach --unicode-- Methode Deklaration hinzufügen: --unicode -. Short_description = 'Student Name' – madzohan