from django import forms from django.forms import ModelForm from django.contrib.auth.models import User class UserCreateForm(ModelForm): password1 = forms.CharField(label='Password', widget=forms.PasswordInput) password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput) class Meta: model = User fields = ['username', 'email'] def clean_password2(self): password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: raise forms.ValidationError("Passwords don't match") return password1 def clean_email(self): #Make sure Email is unique email = self.cleaned_data.get("email") if User.objects.filter(email = email): raise forms.ValidationError("Email already in use.") return email def save(self, commit=True): user = super(UserCreateForm, self).save(commit=False) user.set_password(self.cleaned_data["password1"]) user.is_active = False if commit: user.save() return user class UserUpdateForm(ModelForm): new_password1 = forms.CharField(label='New Password', widget=forms.PasswordInput, required=False) new_password2 = forms.CharField(label='New Password confirmation', widget=forms.PasswordInput, required=False) current_password = forms.CharField(label='Current Password', widget=forms.PasswordInput) class Meta: model = User fields = ['email'] def clean_current_password(self): current_password = self.cleaned_data.get("current_password") if not self.instance.check_password(current_password): raise forms.ValidationError("Password incorrect") return current_password def clean_new_password2(self): password1 = self.cleaned_data.get("new_password1") password2 = self.cleaned_data.get("new_password2") if password1 and password2 and password1 != password2: raise forms.ValidationError("Passwords don't match") return password1 def clean_email(self): #Make sure Email is still unique email = self.cleaned_data.get("email") if User.objects.filter(email = email).exclude(id=self.instance.id): raise forms.ValidationError("Email already in use.") return email def save(self, commit=True): user = super(UserUpdateForm, self).save(commit=False) password = self.cleaned_data.get("new_password1") if password: user.set_password(password) if commit: user.save() return user