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)
Мұндай шектеулер суперпайдаланушыны әкімшіліктен қалыпты пайдаланушылар өңдеуінен қорғағыңыз келсе пайдалы.