Django Admin - Conditional Fieldsets

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin


class UserAdmin(BaseUserAdmin):
    list_display = ('id', 'email', 'is_staff', )

    def get_fieldsets(self, request, *args, **kwargs):
        if request.user.is_superuser:
            return (
                (None, {
                    'fields': (
                        'email', 'password', 'first_name', 'last_name', 'groups', 'is_active', 'is_superuser',
                        'is_staff', 'last_login', 'user_permissions',
                    ),
                }),
            )
        return (
            (None, {
                'fields': (
                    'first_name', 'last_name',
                )
            }),
        )

Overriding django.contrib.admin.ModelAdmin’s get_fieldsets method can give you the power to apply conditions on what fieldsets to show to specific users.