2017-04-15 16 views
0

ジャンゴ内のすべてのフォームフィールドの検証のエラー:クリア私は(forms.pyに)簡単なユーザ登録フォームを持っている

from django.contrib.auth.models import User 

class UserForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput 
           validators=[MinLengthValidator(6)]) 
    password_repeat = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model = User 
     fields = ['username', 'password','password_repeat'] 

誰かが何かを入力しようとすると、検証は私が同じ形式になりたい失敗した場合再度レンダリングされますが、すべてのフィールドがクリアされます。現時点では私の見解は(views.pyで)次のようになります。

def signup(request): 
    form = UserForm(request.POST or None) 

    if form.is_valid(): 
     user = form.save(commit=False) 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     password_repeat = form.cleaned_data['password-repeat'] 
     user.set_password(password) 
     user.save() 
     user = auth.authenticate(username=username, password=password) 
     if user is not None and user.is_active: 
      auth.login(request, user) 
      return redirect('/') 

return render(request, 'signup.html', {'form': form}) 

問題はform.fields['username']フィールドがまだ入力されたため、レンダリングするために渡されたユーザー名が含まれていることです。

私は今解決策を探していますが、今は見つけられません。私の推測では、解決策は、私が得るように見えない方法clean()と関係があるということです。

答えて

0

これは奇妙なことです。ほとんどの人がフィールドを保存してエラーを表示したいので、これは一般的に聞かれる質問の反対です。

ただし、フォームをクリアしたい場合は、新しいインスタンスをインスタンス化するだけです。

if form.is_valid(): 
    ... 
else: 
    form = UserForm() 
return render(request, 'signup.html', {'form': form}) 
+0

申し訳ありませんが、私はこれをクリアしてください。私はエラーを表示するだけでなく、すべてのフィールドをクリアします。私が新しいフォームをインスタンス化するだけでは、エラーメッセージが失われます。 – FloodLuszt

関連する問題