class RestrictedUserAdmin(UserAdmin):
declared_fieldsets = None
restricted_fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
)
def queryset(self, request):
if request.user.is_superuser:
return User.objects.all()
return User.objects.filter(id__exact=request.user.id)
def get_fieldsets(self, request, obj=None):
if request.user.is_superuser:
return super(UserAdmin, self).get_fieldsets(request, obj)
return self.restricted_fieldsets
def get_form(self, request, obj=None, **kwargs):
"""
Workaround bug http://code.djangoproject.com/ticket/9360 (thanks to peritus)
"""
return super(UserAdmin, self).get_form(request, obj, fields=flatten_fieldsets(self.get_fieldsets(request, obj)))
admin.site.unregister(User)
admin.site.register(User, RestrictedUserAdmin)
Comments
This avoids some issues (especially in Django 1.1) and follows the philosophy of the super class. In particular, it honors the following check:
#