Как я могу динамически указать атрибут 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