Django表单验证KeyError

时间:2016-01-17 11:04:24

标签: django django-models django-forms

编辑:

如果有人和我有同样的愚蠢,我会把它留下来。

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

说明:我在运行时正在改变现状,我改变的一些东西被立即发送并立即工作。有些人需要服务器重启才能生效。我只是花了很多时间来改变尽可能多的东西,试着让它在所有需要的时候重新启动。

结束编辑

我正在尝试创建一个注册页面,每当我尝试验证时,我就会收到Keyerrors。

我已经尝试了很长一段时间寻找解决方案以及查看大量的堆栈溢出答案,我认为这些答案应该正常工作,但无论出于何种原因都无法正常工作。

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

清洁:

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)

表格的元素:

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})

从views.py发布:

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'

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

编辑:我决定在提交之前对它进行更多测试,它似乎发生在第44行,无论第44行是什么。如果它处于不同的功能中?没关系,第44行。所有字段最初都是必需的,但在此测试期间我将它们全部更改为False,我知道如果我将用户名/电子邮件留空,则此时会出错。< / p>

这是堆栈跟踪:

 'items' => [  
            [
              'label' => '<span style="font-size:1.3em;" class="glyphicon glyphicon-cog"></span>', 
              'url' => ['/site/controlPanel'],
              'options' =>[ 
                              'data-toggle' => 'tooltip',  
                              'data-placement' => 'tooltip',
                              'title' =>'Control Panel', 
                              'class' => 'tooltipStyle'
                          ],
            ],
            [
              'label' => '<span style="font-size:1.3em;" class="glyphicon glyphicon-tasks"></span>', 
              'url' => ['/site/controlPanel'],
              'options' =>[ 
                              'data-toggle' => 'tooltip',  
                              'data-placement' => 'tooltip',
                              'title' =>'Day Summary',
                              'class' => 'tooltipStyle'
                          ],
            ],

1 个答案:

答案 0 :(得分:2)

  

[错误]似乎发生在第44行,无论第44行是什么。如果它处于不同的功能中?没关系,第44行。

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

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

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