Django 表单验证 KeyError

Django Form Validation KeyError

编辑:

我将此搁置,以防有人和我一样愚蠢。

解决方法:重启apache服务器..

说明:我在 运行 时正在实时更改内容,我更改的一些内容已立即发送过来并立即生效。有些地方需要服务器重启才能生效。我只是花了很多时间更改尽可能多的东西,以尝试在重新启动时让它正常工作。

编辑结束

我正在尝试创建一个注册页面,但每当我尝试验证时,我都会遇到键盘错误。

我已经尝试了很长一段时间寻找解决方案,并查看了很多我认为应该有效的堆栈溢出答案,但由于某种原因根本没有奏效。

错误总是出现在同一行,无论哪个字段留空(password1 或 password2)

清洁:

def clean(self):
    if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data and self.cleaned_data['password1'] != self.cleaned_data['password2']:
        raise forms.ValidationError("Passwords do not match")
    return cleaned_data

表单元素:

username = forms.CharField(required = False)
password1 = forms.CharField(required = False, widget=forms.PasswordInput, label='Password')
password2 = forms.CharField(required = False, widget=forms.PasswordInput, label='Repeat Password')
email = forms.EmailField(required = False)

来自 views.py 的相关事件:

if request.method == 'POST':
    form = UserForm(request.POST)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect("/register/success")
else:
    form = UserForm()

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

我在 HTML 中的表单模板是一个 table,每行 4 行 3 列。第一列是错误,通常是空白的,但如果有的话,会弹出与该字段相关的错误。第二个是字段的标签,第三个是字段本身的文本框。

编辑:我决定在提交之前多测试一下,它似乎发生在第 44 行,无论第 44 行是什么。如果它在不同的函数中?没关系,第 44 行。所有字段最初都是必需的,但在此测试期间我将它们全部更改为 False,我知道如果我将 username/email 留空,此时会出错。

这是堆栈跟踪:

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
149.                     response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/register/views.py" in register
10.         if form.is_valid():

File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in is_valid
161.         return self.is_bound and not self.errors

File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in errors
153.             self.full_clean()

File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in full_clean
363.         self._clean_form()

File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _clean_form
390.             cleaned_data = self.clean()

File "/register/forms.py" in clean
44.         temp = 2

Exception Type: KeyError at /register/
Exception Value: 'password1'

[the error] appears to happen at line 44, no matter what is at line 44. If it's in a different function? Doesn't matter, line 44.

更改代码后需要重启服务器。如果服务器仍然说错误在第 44 行,这意味着您在更改代码后还没有重新启动服务器。

如果您使用的是 Django 开发服务器(即 ./manage.py runserver),那么它应该检测到代码更改并重新启动。但是,如果您在生产环境中,则可能需要手动重启服务器(例如 Apache)。

希望重新启动您的服务器会使错误消失。如果不是,请用完整的表格和完整的回溯更新错误。