forms.py 2.7 KB

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