Evgenii Legotckoi
31 января 2020 г. 14:50

Django - Урок 051. Как изменить queryset и возможность редактирования в ModelAdmin в зависимости от пользователя

Краткое примечание о том, как исправить форму администрирования набора запросов admin.ModelAdmin или UserAdmin . На самом деле разницы нет, так как форма UserAdmin наследуется от admin.ModelAdmin . Тем не менее, я покажу UserAdmin в качестве примера.

Задача заключается в следующем. На сайте есть суперпользователи и пользователи от администрации. Суперпользователи могут видеть всех пользователей и редактировать их по своему усмотрению. А пользователи-администраторы могут видеть все записи о пользователях, кроме суперпользователей, а также не могут назначать других пользователей суперпользователями.


А теперь к решению. Эта форма будет выглядеть следующим образом.

  1. # -*- coding: utf-8 -*-
  2.  
  3. from django.contrib.auth.admin import UserAdmin
  4.  
  5.  
  6. class EUserAdmin(UserAdmin):
  7. def get_readonly_fields(self, request, obj=None):
  8. # We make the field uneditable if the user is not a superuser
  9. return super().get_readonly_fields(request) if request.user.is_superuser else ('is_superuser',)
  10.  
  11. def get_queryset(self, request):
  12. qs = super().get_queryset(request)
  13. # and also exclude all superusers from queryset if the user is not a superuser
  14. return qs if request.user.is_superuser else qs.exclude(is_superuser=True)

Такие ограничения полезны, если вы хотите защитить суперпользователя от редактирования обычными пользователями из администрации.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь