Невелика замітка про те, як виправити queryset формі адміністрування 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): # Робимо поле Нередагована, якщо користувач не є суперкористувачем return super().get_readonly_fields(request) if request.user.is_superuser else ('is_superuser',) def get_queryset(self, request): qs = super().get_queryset(request) # а також виключаємо з queryset всіх суперкористувачем, якщо користувач не є суперепользователем return qs if request.user.is_superuser else qs.exclude(is_superuser=True)
Подібні обмеження корисні, якщо потрібно захистити суперкористувача від редагування звичайними користувачами з адміністрації.