admin.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. list_display = AuthUserAdmin.list_display + ('adherent_id',)
  9. def adherent_id(self, user):
  10. adherent = user.profile.adherent
  11. if adherent:
  12. return adherent.id
  13. adherent_id.short_description = 'Numéro d’adhérent'
  14. def get_readonly_fields(self, request, obj=None):
  15. readonly_fields = super().get_readonly_fields(request, obj)
  16. if obj and not request.user.is_superuser:
  17. readonly_fields += ('username',)
  18. return readonly_fields
  19. def get_fieldsets(self, request, obj=None):
  20. if request.user.is_superuser:
  21. return (
  22. AuthUserAdmin.fieldsets[0],
  23. AuthUserAdmin.fieldsets[1],
  24. (AuthUserAdmin.fieldsets[2][0], {
  25. 'classes': ('collapse',),
  26. 'fields': ('is_active', 'is_staff', 'is_superuser', 'groups',), # removing of user_permissions
  27. }),
  28. (AuthUserAdmin.fieldsets[3][0], {
  29. 'classes': ('collapse',),
  30. 'fields': AuthUserAdmin.fieldsets[3][1]['fields'],
  31. }),
  32. )
  33. if obj:
  34. return (
  35. AuthUserAdmin.fieldsets[0], # Note: password is mandatory (but readonly)
  36. AuthUserAdmin.fieldsets[1],
  37. )
  38. else:
  39. return (
  40. (None, {'fields': ('username',)}),
  41. AuthUserAdmin.fieldsets[1],
  42. )
  43. def get_form(self, request, obj=None, **kwargs):
  44. # get_inlines does not exists :-(
  45. if obj:
  46. self.inlines = (ProfileInline, AdherentInline,)
  47. else:
  48. self.inlines = ()
  49. if request.user.is_superuser or obj:
  50. return super().get_form(request, obj, **kwargs)
  51. else:
  52. # This creation form does not ask for a password
  53. return UserCreationForm
  54. def user_change_password(self, request, id):
  55. if not request.user.is_superuser:
  56. raise PermissionDenied
  57. return super().user_change_password(request, id)
  58. admin.site.unregister(User)
  59. admin.site.register(User, UserAdmin)