Eine kurze Anmerkung zum Reparieren des admin.ModelAdmin - oder UserAdmin -Abfragesatz-Verwaltungsformulars. Es gibt wirklich keinen Unterschied, da die Form UserAdmin von admin.ModelAdmin erbt. Ich zeige jedoch UserAdmin als Beispiel.
Die Aufgabe lautet wie folgt. Die Site hat Superuser und Benutzer aus der Verwaltung. Superuser können alle Benutzer sehen und sie nach Belieben bearbeiten. Und Administratorbenutzer können alle Benutzerdatensätze außer Superuser sehen und können keine anderen Benutzer als Superuser festlegen.
Und nun zur Entscheidung. Dieses Formular wird wie folgt aussehen.
# -*- 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)
Solche Einschränkungen sind sinnvoll, wenn Sie den Superuser davor schützen möchten, von normalen Benutzern aus der Administration bearbeitet zu werden.