2013-04-20 4 views
10

Beim Versuch, die Spalten dynamisch zu ändern, die auf der Modelllistenseite des django admin angezeigt werden, habe ich versucht, die __init__()-Methode meiner ModelAdmin-Klasse zu überschreiben oder ein bestimmtes Feld abhängig von den Berechtigungen dynamisch aus dem list_display-Attribut zu entfernen des aktuellen Benutzers. Ich habe jedoch festgestellt, dass ModelAdmin-Klassen nur einmal pro Neustart instanziiert werden, so dass das nicht funktioniert ...Wie kann ich das Attribut "list_display" einer django ModelAdmin-Klasse dynamisch angeben?

Gibt es eine andere Möglichkeit, das list_display Feld dynamisch zu ändern?

Antwort

16

Während diese Frage, ich auf die Antwort gestolpert, so dass ich dachte, ich würde Aktie ...

Ticket #14206 zeigt an, dass diese Funktion vor einiger Zeit django wurde (Version 1.4, ich glaube). ModelAdmin-Klassen unterstützen jetzt eine get_list_display() -Methode:

def get_list_display(self, request): 
    if request.user.has_perm('my_app.my_permission'): 
     list_display = ('field_1', 'field_2', 'dynamic_field',) 
    else: 
     list_display = ('field_1', 'field_2',) 
    return list_display 
Verwandte Themen