2010-08-25 12 views
11

Utilizzo Django 1.1:Utilizzo di metodi o attributi arbitrari come campi sugli oggetti Django ModelAdmin?

Il Django admin docs describe con metodi arbitrari o attributi su un oggetto ModelAdmin nell'attributo list_display classe. Questo è un ottimo meccanismo per la visualizzazione di informazioni arbitrarie nella visualizzazione elenco per un modello. Tuttavia, non sembra esserci un meccanismo simile per la pagina del modulo di modifica stessa. Qual è il modo più semplice per eseguire questa utile piccola funzionalità per visualizzare informazioni arbitrarie non derivate dal campo nella pagina del modulo di modifica ModelAdmin?

Un esempio concreto della configurazione desiderata:

class CustomUserAdmin(UserAdmin): 
    def registration_key(self, obj): 
     """Special method for looking up and returning the user's registration key 
     """ 
     return 'the_key' 

    list_display = ('email', 'first_name', 'last_name', 'is_active', 'is_staff', 
        'registration_key') # <- this works 

    fields = ('email', 'first_name', 'last_name', 'is_active', 'is_staff', 
       'registration_key') # <- this DOESN'T work? 

risposta

18

Aggiungere il metodo anche alla tupla 'readonly_fields'.

+0

Vorrei! 'readonly_fields' è nuovo in Django 1.2, e per ora sono bloccato con 1.1. –

+0

Allora, ho paura, non c'è modo di farlo in 1.1 senza un hacking grave. –

1

ho fatto prima sovrascrivendo il modello per il modulo di modifica, e l'accesso ai metodi personalizzati sul modello. L'utilizzo di fields richiede all'amministratore di provare ad aggiungere un campo modulo per il metodo.

+1

modelli Admin mi riempiono con timore e tremore, ma potrei prendere in considerazione questo. –

3

Provare quanto segue:

class CustomUserAdminForm(forms.ModelForm): 
    registration_key = forms.IntegerField()         

    class Meta: 
     model = User 

class CustomUserAdmin(UserAdmin): 
    def registration_key(self, obj): 
     """Special method for looking up and returning the user's registration key 
     """ 
     return 'the_key' 

    list_display = ('email', 'first_name', 'last_name', 'is_active', 'is_staff', 
        'registration_key') # <- this works 

    fields = ('email', 'first_name', 'last_name', 'is_active', 'is_staff', 
       'registration_key') 
+0

Interessante. Per fortuna, sono stato in grado di eliminare le catene di 1.1 da quando ho fatto questa domanda, ma hai confermato che funziona in 1.1? –

Problemi correlati