forms.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django import forms
  4. from django.contrib.auth.forms import PasswordResetForm, ReadOnlyPasswordHashField
  5. from coin.members.models import Member
  6. class MemberCreationForm(forms.ModelForm):
  7. """
  8. This form was inspired from django.contrib.auth.forms.UserCreationForm
  9. and adapted to coin specificities
  10. """
  11. username = forms.RegexField(required=False,
  12. label="Nom d'utilisateur", max_length=30, regex=r"^[\w.@+-]+$",
  13. help_text="Laisser vide pour le générer automatiquement à partir du "
  14. "nom d'usage, nom et prénom, ou nom de l'organisme")
  15. password = forms.CharField(
  16. required=False, label='Mot de passe', widget=forms.PasswordInput,
  17. help_text="Laisser vide et envoyer un mail de bienvenue pour que "
  18. "l'utilisateur choisisse son mot de passe lui-même")
  19. class Meta:
  20. model = Member
  21. fields = '__all__'
  22. def save(self, commit=True):
  23. """
  24. Save member, then set his password
  25. """
  26. member = super(MemberCreationForm, self).save(commit=False)
  27. member.set_password(self.cleaned_data["password"])
  28. if commit:
  29. member.member()
  30. return member
  31. class MemberChangeForm(forms.ModelForm):
  32. """
  33. This form was inspired from django.contrib.auth.forms.UserChangeForm
  34. and adapted to coin specificities
  35. """
  36. password = ReadOnlyPasswordHashField()
  37. class Meta:
  38. model = Member
  39. fields = '__all__'
  40. def __init__(self, *args, **kwargs):
  41. super(MemberChangeForm, self).__init__(*args, **kwargs)
  42. f = self.fields.get('user_permissions', None)
  43. if f is not None:
  44. f.queryset = f.queryset.select_related('content_type')
  45. def clean_password(self):
  46. # Regardless of what the user provides, return the initial value.
  47. # This is done here, rather than on the field, because the
  48. # field does not have access to the initial value
  49. return self.initial["password"]
  50. def clean_username(self):
  51. # idem clean_password
  52. return self.initial["username"]
  53. class MemberPasswordResetForm(PasswordResetForm):
  54. pass