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 .models import Profile from .forms import UserCreationForm from adhesions.admin import AdherentInline class ProfileInline(admin.StackedInline): model = Profile def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False class UserAdmin(AuthUserAdmin): list_display = AuthUserAdmin.list_display + ('adherent_id',) def adherent_id(self, user): adherent = user.profile.adhesion 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)