Как я могу динамически указать атрибут list_display класса django ModelAdmin?

При попытке динамического изменения столбцов, отображаемых на странице списка моделей администратора django, я попытался переопределить метод __init__() моего класса ModelAdmin для динамического добавления или удаления определенного поля из атрибута list_display, в зависимости от на разрешениях текущего пользователя. Тем не менее, я обнаружил, что классы ModelAdmin создаются только один раз за каждый перезапуск, поэтому это не работает...

Есть ли другой способ динамического изменения поля list_display?

Ответ 1

Задавая этот вопрос, я наткнулся на ответ, поэтому подумал, что поделюсь...

Ticket #14206 указывает, что эта функция была добавлена ​​в django некоторое время назад (версия 1.4, я верю). В классах ModelAdmin теперь поддерживается метод 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