2013-04-20 6 views
10

Nel tentativo di modificare dinamicamente le colonne visualizzate nella pagina elenco modelli dell'amministratore di django, ho provato a sovrascrivere il metodo __init__() della mia classe ModelAdmin per aggiungere o rimuovere in modo dinamico un particolare campo dall'attributo list_display, a seconda delle autorizzazioni dell'utente corrente. Tuttavia, ho trovato che le classi ModelAdmin sono solo istanziati una volta per riavvio, quindi non funziona ...Come è possibile specificare in modo dinamico l'attributo "list_display" di una classe django ModelAdmin?

C'è un altro modo per cambiare dinamicamente il campo list_display?

risposta

16

Mentre questa domanda, ci siamo imbattuti in una risposta, così ho pensato che vorrei condividere ...

biglietteria #14206 indica che questa funzione è stato aggiunto al Django qualche tempo fa (versione 1.4, I belive). Le classi ModelAdmin supportano ora un metodo 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 
Problemi correlati