2016-08-02 14 views
0

hinzufügen Ich befolge das Beispiel in Django Admin-Site list_display benutzerdefinierte Methode und ich bekomme einen Fehler 'colored_name() nimmt genau 1 Argument (2 gegeben)', was ist das Problem ?Wie admin benutzerdefiniertes Feld mit einer Methode

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    color_code = models.CharField(max_length=6) 

def colored_name(self): 
    return format_html(
     '<span style="color: #{};">{} {}</span>', 
     self.color_code, 
     self.first_name, 
     self.last_name, 
    ) 

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('first_name', 'last_name', 'colored_name') 
+0

Wie lautet Ihr Admin-Code für "Person"? –

+0

Veröffentlichen Sie Ihren Code niemals im Kommentarbereich, bitte ändern Sie Ihre Frage mit dem entsprechenden Code. Können Sie die Rückverfolgung bitte auch teilen? –

+0

Bitte schreiben Sie die vollständige Traceback und beheben Sie den Codeeinzug. – Alasdair

Antwort

1

Sie sollten colored_name innerhalb PersonAdmin class nicht Person Model definieren, weil es für die Admin-Panel verwendet eine Methode ist. Außerdem erhält es ein obj Argument, das die Instanz darstellt.

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('first_name', 'last_name', 'colored_name') 

    def colored_name(self, obj): 
     return format_html(
      '<span style="color: #{};">{} {}</span>', 
      obj.color_code, 
      obj.first_name, 
      obj.last_name, 
     )