2010-08-09 23 views

Antwort

9

Um zu ändern, wie und was in der Änderungslistenansicht angezeigt wird, kann list_display Option von 10 verwendet werden.

Wohlgemerkt, Spalten in list_display, die keine echten Datenbankfelder sind, können nicht zum Sortieren verwendet werden. Daher muss dem Django-Administrator ein Hinweis gegeben werden, welches Datenbankfeld tatsächlich zum Sortieren verwendet werden soll.

Man tut dies, indem man das Attribut admin_order_field auf das Callable setzt, das benutzt wird, um einen Wert in HTML zu verpacken.

Beispiel von Django docs für bunte Felder:

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

    def colored_first_name(self): 
     return '<span style="color: #%s;">%s</span>' % (
          self.color_code, self.first_name) 
    colored_first_name.allow_tags = True 
    colored_first_name.admin_order_field = 'first_name' 

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

Ich hoffe, dass einige dies trägt dazu bei.

+1

Danke, .allow_tags hat den Job gemacht. – kelvan

+0

Große Antwort @rebus. Gibt es sowieso eine Bindung der 'colored_first_name' Funktion und Attras zum' PersonAdmin' im Gegensatz zum Model? Es scheint seltsam zu sein, adminspezifische Attribute für das Modell anzugeben. – cooncesean

+1

@cooncesean Ja, der Wert von list_display kann entweder ein String-Name der Methode auf dem Modell oder der admin-Klasse sein, oder er kann eine Referenz auf eine aufrufbare sein. [Weitere Informationen finden Sie in den Dokumentationen] (https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display) –

2

Zusätzlich Sie

colored_first_name.short_description = 'first name' 

Für einen schönen Spaltentitel

1

Dies ist eine alte Frage verwenden können, aber ich werde ein Beispiel aus der Dokumentation für Django 1.10 hinzufügen, weil allow_tags in der akzeptierten Antwort verwendet Attribut veraltet seit Django 1.9 und es wird empfohlen, format_html stattdessen zu verwenden:

from django.db import models 
from django.contrib import admin 
from django.utils.html import format_html 

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')