2010-08-09 15 views

risposta

9

Per modificare come e cosa viene visualizzato nella visualizzazione elenco modifiche, è possibile utilizzare l'opzione list_display di ModelAdmin.

Attenzione, le colonne fornite in list_display che non sono campi di database reali non possono essere utilizzate per l'ordinamento, quindi è necessario fornire all'amministratore di Django un suggerimento su quale campo di database utilizzare effettivamente per l'ordinamento.

Uno si ottiene impostando l'attributo admin_order_field nel callable utilizzato per includere un valore in HTML, ad esempio.

Esempio da documentazione Django per i campi colorati:

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

spero che alcuni di questo aiuta.

+1

Grazie, .allow_tags ha fatto il lavoro – kelvan

+0

Ottima risposta @rebus. Esiste comunque un modo per associare la funzione 'colored_first_name' e attrarre il' PersonAdmin' in opposizione al modello? Sembra strano specificare gli attrs specifici dell'amministratore per il modello. – cooncesean

+1

@cooncesean Sì, il valore di list_display può essere un nome stringa del metodo sul modello o la classe admin oppure può essere un riferimento a un callable. [Leggi i documenti per altri esempi] (https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display) –

2

Inoltre è possibile utilizzare

colored_first_name.short_description = 'first name' 

Per un bel titolo di una colonna

1

Questa è una vecchia questione, ma io aggiungerò un esempio da documentazione per Django 1.10 perché allow_tags attributo utilizzato nella risposta accettata è deprecato dal Django 1.9 e si raccomanda di usare format_html invece:

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