2010-08-25 6 views
11

Verwendung Django 1.1:Verwenden von beliebigen Methoden oder Attributen als Felder auf Django ModelAdmin-Objekten?

Die Django admin docs describe auf einem Objektmodeladmin beliebige Methoden oder Attribute unter Verwendung von in dem list_display Klassenattribut. Dies ist ein großartiger Mechanismus zum Anzeigen beliebiger Informationen in der Listenanzeige für ein Modell. Es scheint jedoch keinen ähnlichen Mechanismus für die Änderungsformularseite selbst zu geben. Was ist der einfachste Weg, um diese nützliche kleine Funktion zum Anzeigen von willkürlichen, nicht von Feldern abgeleiteten Informationen auf der ModelAdmin-Änderungsformularseite zu erreichen?

Ein konkretes Beispiel für die gewünschte Einstellung:

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? 

Antwort

18

Fügen Sie die Methode auch dem Tupel 'readonly_fields' hinzu.

+0

Ich wünsche! 'readonly_fields' ist neu in Django 1.2, und ich stecke vorerst mit 1.1 fest. –

+0

Sie haben dann Pech, ich fürchte - es gibt keine Möglichkeit, dies in 1.1 ohne schwere Hacker zu tun. –

1

ich dies vor durch Überschreiben der Vorlage für das Änderungsformular gemacht habe, und auf dem Modell benutzerdefinierte Methoden zugreifen. Wenn Sie fields verwenden, fordert Sie der Administrator auf, ein Formularfeld für Ihre Methode hinzuzufügen.

+1

Admin-Vorlagen erfüllen mich mit Furcht und Zittern, aber ich könnte dies zu berücksichtigen haben. –

3

Versuchen Sie Folgendes:

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

Interessant. Glücklicherweise konnte ich meine Ketten von 1,1 abwerfen, seit ich diese Frage gestellt habe, aber Sie haben bestätigt, dass dies in 1.1 funktioniert. –

Verwandte Themen