2017-02-18 8 views
1

в моей форме я добавил переменную с именем 'password_confirm'. но, по мнению, джанго этого не знает. в html-файле, я создал форму вручную.django- my form имеет attrubute 'password_confirm', но на вид не известно

мой код формы:

class UserRegisterForm(forms.Form): 
name = forms.CharField(required=True,) 
family = forms.CharField(required=True) 
username = forms.CharField(required=True) 
email = forms.EmailField(required=True) 
password = forms.CharField(required=True, widget=forms.PasswordInput()) 
password_confirm = forms.CharField(required=True, widget=forms.PasswordInput()) 
type = forms.CharField(max_length=1) 


def clean_password(self, *args, **kwargs): 
    pas1 = self.cleaned_data.get('password') 
    pas2 = self.cleaned_data.get('password_confirm') 
    if pas1 != pas2: 
     raise forms.ValidationError("password and confirmation not matched!") 

    return super(UserRegisterForm, self).clean() 

def clean_email(self): 
    email_qs = User.objects.filter(email=self.cleaned_data['email']) 
    if email_qs.exists(): 
     raise forms.ValidationError("this email already exists!") 

это мой элемент формы:

<input type="password" name="password_confirm" id="confirm-password" tabindex="8" class="form-control" placeholder="confirm" dir="rtl"/> 

и это мнение:

def register_view(request): 
if request.user.is_authenticated: 
    return HttpResponseRedirect('/') 

form = UserRegisterForm(request.POST or None) 
if form.is_valid(): 
    user = form.save(commit=False) 
    password = form.cleaned_data['password'] 
    user.set_password(password) 
    user.save() 
    profile = Profile() 
    profile.name = form.cleaned_data['name'] 
    profile.family = form.cleaned_data['family'] 
    profile.name = form.cleaned_data['email'] 
    profile.type = form.cleaned_data['type'] 
    profile.save() 
    login(request, user) 
    return HttpResponseRedirect('/') 
return render(request, 'accounts/signup.html', {'form': form}) 

это ошибка: KeyError в/регистр/ 'password_confirm'

В чем проблема?

ответ

1

Порядок заполнения полей формы. Начиная с password, определенного до password_confirm в clean_password метод password_confirm пуст. Вам необходимо выполнить проверку пароля в clean_password_confirm, просто переименуйте его:

def clean_password_confirm(self, *args, **kwargs): 
    ...