admin.py 2.6 KB

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