from django.contrib import admin from django.contrib.auth.models import User from django.contrib.auth.admin import UserAdmin as AuthUserAdmin from django.core.exceptions import PermissionDenied from .forms import UserCreationForm from adhesions.admin import ProfileInline, AdherentInline class UserAdmin(AuthUserAdmin): list_display = AuthUserAdmin.list_display + ('adherent_id',) def adherent_id(self, user): adherent = user.profile.adherent if adherent: return adherent.id adherent_id.short_description = 'Numéro d’adhérent' def get_readonly_fields(self, request, obj=None): readonly_fields = super().get_readonly_fields(request, obj) if obj and not request.user.is_superuser: readonly_fields += ('username',) return readonly_fields def get_fieldsets(self, request, obj=None): if request.user.is_superuser: return ( AuthUserAdmin.fieldsets[0], AuthUserAdmin.fieldsets[1], (AuthUserAdmin.fieldsets[2][0], { 'classes': ('collapse',), 'fields': ('is_active', 'is_staff', 'is_superuser', 'groups',), # removing of user_permissions }), (AuthUserAdmin.fieldsets[3][0], { 'classes': ('collapse',), 'fields': AuthUserAdmin.fieldsets[3][1]['fields'], }), ) if obj: return ( AuthUserAdmin.fieldsets[0], # Note: password is mandatory (but readonly) AuthUserAdmin.fieldsets[1], ) else: return ( (None, {'fields': ('username',)}), AuthUserAdmin.fieldsets[1], ) def get_form(self, request, obj=None, **kwargs): # get_inlines does not exists :-( if obj: self.inlines = (ProfileInline, AdherentInline,) else: self.inlines = () if request.user.is_superuser or obj: return super().get_form(request, obj, **kwargs) else: # This creation form does not ask for a password return UserCreationForm def user_change_password(self, request, id): if not request.user.is_superuser: raise PermissionDenied return super().user_change_password(request, id) admin.site.unregister(User) admin.site.register(User, UserAdmin)