def save(self, commit=True, rel_instance=None): engagement = super(EngagementForm, self).save(commit=False) if rel_instance: engagement.content_type = ContentType.objects.get_for_model(rel_instance) engagement.object_id = rel_instance.pk try: person = engagement.person except Person.DoesNotExist: person = Person() for field in ('gender', 'first_name', 'last_name'): setattr(person, field, self.cleaned_data[field]) person.save() engagement.person = person if commit: engagement.save() return engagement
def save(self, commit=True, rel_instance=None): engagement = super(EngagementForm, self).save(commit=False) if rel_instance: engagement.content_type = ContentType.objects.get_for_model( rel_instance) engagement.object_id = rel_instance.pk try: person = engagement.person except Person.DoesNotExist: person = Person() for field in ('gender', 'first_name', 'last_name'): setattr(person, field, self.cleaned_data[field]) person.save() engagement.person = person if commit: engagement.save() return engagement
class OrganizationForm1(OrganizationMixin, forms.ModelForm): error_messages = { 'duplicate_username': _("A user with that username already exists."), 'password_mismatch': _("The two password fields didn't match."), } username = forms.RegexField( label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$', help_text=_("Required. 30 characters or fewer. Letters, digits and " "@/./+/-/_ only."), error_messages={ 'invalid': _("This value may contain only letters, numbers and " "@/./+/-/_ characters.") }) password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput) password2 = forms.CharField( label=_("Password confirmation"), widget=forms.PasswordInput, help_text=_("Enter the same password as above, for verification.")) gender = forms.ChoiceField(choices=(('M', u'M.'), ('W', u'Mme')), widget=forms.RadioSelect, required=False, label='Genre') charte = forms.TypedChoiceField(coerce=lambda x: bool(int(x)), choices=((0, u'Non'), (1, u'Oui')), widget=forms.RadioSelect, initial=0, required=False, label=u'J\'accepte la <a \ data-toggle="modal" href="#charte">charte de l\'utilisateur</a>') class Meta: model = User fields = ("username", "last_name", "first_name", "email") def __init__(self, request, propose, *args, **kwargs): self.request = request if request.user.is_authenticated(): self.person = request.user.get_profile() else: self.person = Person() super(OrganizationForm1, self).__init__(*args, **kwargs) self.fields['last_name'].required = True self.fields['gender'].initial = self.person.gender self.fields['email'].required = True self.fields['email'].label = u'Email' if self.instance.pk: del self.fields['username'] del self.fields['password1'] del self.fields['password2'] del self.fields['charte'] self.set_helper( (InlineRadios('gender'), 'first_name', 'last_name', 'email')) else: self.set_helper( (InlineRadios('gender'), 'first_name', 'last_name', 'email', 'username', 'password1', 'password2', HTML('<hr>'), InlineRadios('charte', css_class="large-label"))) def clean_username(self): # Since User.username is unique, this check is redundant, # but it sets a nicer error message than the ORM. See #13147. username = self.cleaned_data["username"] existing_users = User.objects.filter(username=username) existing_users = existing_users.exclude( username=self.instance.username) if existing_users.exists(): raise forms.ValidationError( self.error_messages['duplicate_username']) return username def clean_password2(self): password1 = self.cleaned_data.get("password1", "") password2 = self.cleaned_data["password2"] if password1 != password2: raise forms.ValidationError( self.error_messages['password_mismatch']) return password2 def clean_charte(self): if not self.cleaned_data['charte']: raise forms.ValidationError( u'Vous devez accepter la charte pour pouvoir vous inscrire.') return True @transaction.commit_on_success def save(self): if not self.instance.pk: user = super(OrganizationForm1, self).save(commit=False) user.set_password(self.cleaned_data["password1"]) user.save() user = authenticate(username=user.username, password=self.cleaned_data['password1']) login(self.request, user) else: user = super(OrganizationForm1, self).save() self.person.user = user self.person.gender = self.cleaned_data['gender'] self.person.username = user.username self.person.email = user.email self.person.first_name = user.first_name self.person.last_name = user.last_name self.person.save() return user
class OrganizationForm1(OrganizationMixin, forms.ModelForm): error_messages = { 'duplicate_username': _("A user with that username already exists."), 'password_mismatch': _("The two password fields didn't match."), } username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$', help_text = _("Required. 30 characters or fewer. Letters, digits and " "@/./+/-/_ only."), error_messages = { 'invalid': _("This value may contain only letters, numbers and " "@/./+/-/_ characters.")}) password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput) password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput, help_text = _("Enter the same password as above, for verification.")) gender = forms.ChoiceField(choices=(('M', u'M.'), ('W', u'Mme')), widget=forms.RadioSelect, required=False, label='Genre') charte = forms.TypedChoiceField(coerce=lambda x: bool(int(x)), choices=((0, u'Non'), (1, u'Oui')), widget=forms.RadioSelect, initial=0, required=False, label=u'J\'accepte la <a \ data-toggle="modal" href="#charte">charte de l\'utilisateur</a>') class Meta: model = User fields = ("username", "last_name", "first_name", "email") def __init__(self, request, propose, *args, **kwargs): self.request = request if request.user.is_authenticated(): self.person = request.user.get_profile() else: self.person = Person() super(OrganizationForm1, self).__init__(*args, **kwargs) self.fields['last_name'].required = True self.fields['gender'].initial = self.person.gender self.fields['email'].required = True self.fields['email'].label = u'Email' if self.instance.pk: del self.fields['username'] del self.fields['password1'] del self.fields['password2'] del self.fields['charte'] self.set_helper(( InlineRadios('gender'), 'first_name', 'last_name', 'email')) else: self.set_helper(( InlineRadios('gender'), 'first_name', 'last_name', 'email', 'username', 'password1', 'password2', HTML('<hr>'), InlineRadios('charte', css_class="large-label"))) def clean_username(self): # Since User.username is unique, this check is redundant, # but it sets a nicer error message than the ORM. See #13147. username = self.cleaned_data["username"] existing_users = User.objects.filter(username=username) existing_users = existing_users.exclude(username=self.instance.username) if existing_users.exists(): raise forms.ValidationError(self.error_messages['duplicate_username']) return username def clean_password2(self): password1 = self.cleaned_data.get("password1", "") password2 = self.cleaned_data["password2"] if password1 != password2: raise forms.ValidationError( self.error_messages['password_mismatch']) return password2 def clean_charte(self): if not self.cleaned_data['charte']: raise forms.ValidationError(u'Vous devez accepter la charte pour pouvoir vous inscrire.') return True @transaction.commit_on_success def save(self): if not self.instance.pk: user = super(OrganizationForm1, self).save(commit=False) user.set_password(self.cleaned_data["password1"]) user.save() user = authenticate(username=user.username, password=self.cleaned_data['password1']) login(self.request, user) else: user = super(OrganizationForm1, self).save() self.person.user = user self.person.gender = self.cleaned_data['gender'] self.person.username = user.username self.person.email = user.email self.person.first_name = user.first_name self.person.last_name = user.last_name self.person.save() return user