forms.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from django import forms
  2. from django.utils.translation import gettext_lazy as _
  3. from .models import Role
  4. from .providers import providers
  5. class RoleForm(forms.ModelForm):
  6. name = forms.CharField(label=_("Role name"))
  7. class Meta:
  8. model = Role
  9. fields = ['name']
  10. def get_permissions_forms(role, data=None):
  11. """utility function for building forms in admin"""
  12. role_permissions = role.permissions
  13. perms_forms = []
  14. for extension, module in providers.list():
  15. try:
  16. module.change_permissions_form
  17. except AttributeError:
  18. message = "'%s' object has no attribute '%s'"
  19. raise AttributeError(message % (extension, 'change_permissions_form'))
  20. FormType = module.change_permissions_form(role)
  21. if FormType:
  22. if data:
  23. perms_forms.append(FormType(
  24. data,
  25. prefix=extension,
  26. ))
  27. else:
  28. perms_forms.append(
  29. FormType(
  30. initial=role_permissions.get(extension),
  31. prefix=extension,
  32. )
  33. )
  34. return perms_forms