2017-04-15 52 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