2017-04-15 51 views
0

我有一個簡單的用戶註冊表單(在forms.py):清除所有表單域驗證錯誤在Django

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