admin.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.contrib import admin
  2. from django.contrib.auth.models import User
  3. from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
  4. from django.core.exceptions import PermissionDenied
  5. from .forms import UserCreationForm
  6. from adhesions.admin import ProfileInline, AdherentInline
  7. class UserAdmin(AuthUserAdmin):
  8. def get_readonly_fields(self, request, obj=None):
  9. readonly_fields = super().get_readonly_fields(request, obj)
  10. if obj and not request.user.is_superuser:
  11. readonly_fields += ('username',)
  12. return readonly_fields
  13. def get_fieldsets(self, request, obj=None):
  14. if request.user.is_superuser:
  15. return super().get_fieldsets(request, obj)
  16. if obj:
  17. return (
  18. AuthUserAdmin.fieldsets[0], # Note: password is mandatory (but readonly)
  19. AuthUserAdmin.fieldsets[1],
  20. )
  21. else:
  22. return (
  23. (None, {'fields': ('username',)}),
  24. AuthUserAdmin.fieldsets[1],
  25. )
  26. def get_form(self, request, obj=None):
  27. # get_inlines does not exists :-(
  28. if obj:
  29. self.inlines = (ProfileInline, AdherentInline,)
  30. else:
  31. self.inlines = ()
  32. if request.user.is_superuser or obj:
  33. return super().get_form(request, obj)
  34. else:
  35. # This creation form does not ask for a password
  36. return UserCreationForm
  37. def user_change_password(self, request, id):
  38. if not request.user.is_superuser:
  39. raise PermissionDenied
  40. return super().user_change_password(request, id)
  41. admin.site.unregister(User)
  42. admin.site.register(User, UserAdmin)