2013-04-20 7 views
10

Próbując dynamicznie zmieniać kolumny wyświetlane na stronie listy modeli administratora django, próbowałem przesłonić metodę __init__() mojej klasy ModelAdmin, aby dynamicznie dodawać lub usuwać określone pola z atrybutu list_display, w zależności od uprawnień bieżącego użytkownika. Jednak odkryłem, że klasy ModelAdmin są tworzone tylko raz przy każdym ponownym uruchomieniu, więc to nie działa ...Jak mogę dynamicznie określać atrybut "list_display" klasy Django ModelAdmin?

Czy istnieje inny sposób dynamicznej zmiany pola pole_zamówienia?

Odpowiedz

16

Chociaż z tym pytaniem, natknąłem się na odpowiedź, więc pomyślałem, że podzielę ...

biletów #14206 wskazuje, że ta funkcja została dodana do django jakiś czas temu (wersja 1.4, wierzę). Klasy ModelAdmin obsługują obecnie metodę get_list_display():

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 
Powiązane problemy