【发布时间】:2017-04-15 10:47:35
【问题描述】:
我有一个简单的用户注册表单(在 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() 方法有关。
【问题讨论】: