Краткое примечание о том, как исправить форму администрирования набора запросов admin.ModelAdmin или UserAdmin . На самом деле разницы нет, так как форма UserAdmin наследуется от admin.ModelAdmin . Тем не менее, я покажу UserAdmin в качестве примера.
Задача заключается в следующем. На сайте есть суперпользователи и пользователи от администрации. Суперпользователи могут видеть всех пользователей и редактировать их по своему усмотрению. А пользователи-администраторы могут видеть все записи о пользователях, кроме суперпользователей, а также не могут назначать других пользователей суперпользователями.
А теперь к решению. Эта форма будет выглядеть следующим образом.
# -*- coding: utf-8 -*- from django.contrib.auth.admin import UserAdmin class EUserAdmin(UserAdmin): def get_readonly_fields(self, request, obj=None): # We make the field uneditable if the user is not a superuser return super().get_readonly_fields(request) if request.user.is_superuser else ('is_superuser',) def get_queryset(self, request): qs = super().get_queryset(request) # and also exclude all superusers from queryset if the user is not a superuser return qs if request.user.is_superuser else qs.exclude(is_superuser=True)
Такие ограничения полезны, если вы хотите защитить суперпользователя от редактирования обычными пользователями из администрации.