2017-02-18 9 views
1

の変数が追加されました。しかし、見解では、djangoはそれを知らない。 htmlファイル内の 、私は手動でフォームを作成しました。django-私のフォームはattrubute 'password_confirm'を持っていますが、私のフォームにはわからない

私のフォームコードは:

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

、これは図:

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!") 

これは私のフォーム要素である

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

フォームのフィールドの順序は重要です。 passwordpassword_confirmの前に定義されているので、clean_passwordの方法password_confirmは空です。 あなただけの名前を変更し、clean_password_confirm方法でパスワードチェックを実行する必要があります。

def clean_password_confirm(self, *args, **kwargs): 
    ... 
関連する問題