Django — фильтр списка администраторов только для суперпользователя?

#django #django-admin-filters

#django #django-admin-filters

Вопрос:

Возможно ли показать list_filter только для суперпользователя?

Ответ №1:

Переопределить просмотр списка изменений

Сохраните копию исходного фильтра списка, чтобы вы могли динамически устанавливать атрибут для каждого запроса. Проверьте, является ли пользователь суперпользователем, и установите свойство фильтра списка или нет.

 class MyAdmin(admin.ModelAdmin):
    list_filter = ('id',)
    _list_filter = list_filter
    # must store list filter reference somewhere

    def changelist_view(self, request, extra_context=None):    
        if not request.user.is_superuser:
            self.list_filter = None
        else:
            self.list_filter = self._list_filter
        return super(MyAdmin, self).changelist_view(request, extra_context)
  

Ответ №2:

Начиная с Django 1.5, вы можете использовать ModelAdmin.get_list_filter:

 class MyAdmin(admin.ModelAdmin):
    def get_list_filter(self, request):
        if request.user.is_superuser:
            return ['field']
        else:
            return []