【问题标题】:Django Form Validation KeyErrorDjango 表单验证 KeyError
【发布时间】:2016-01-17 11:04:23
【问题描述】:

编辑:

如果有人和我一样愚蠢,我会留下这个。

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

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

结束编辑

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

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

错误总是发生在同一行,无论哪个字段留空(密码1或密码2)

干净:

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 表单模板是一个表格,每行 4 行 3 列。第一列是错误,通常为空白,但如果有任何与该字段相关的错误,则会弹出。第二个是字段的标签,第三个是字段本身的文本框。

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

这是堆栈跟踪:

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'

【问题讨论】:

  • 向我们展示您的模板
  • @doniyor 将此归咎于我愚蠢,我是 django 的新手,并且习惯了在制作它们时发生的变化。我什至没有想到要重新启动 apache 服务器。

标签: django django-models django-forms


【解决方案1】:

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

更改代码后,您需要重新启动服务器。如果服务器仍然说错误出现在第 44 行,则表示您在更改代码后尚未重新启动服务器。

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

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

【讨论】:

  • 只是在您回答之前就知道了,但无论如何我都会将其标记为正确。这是我第一次使用 django,我已经习惯了即时变化,所以我什至没有想到它。错误消息有时会发生变化,所以我没有将停留放在 44 -> 重新启动连接一段时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 2011-01-19
  • 2021-06-05
  • 2014-12-06
  • 2017-08-24
  • 2019-02-02
  • 2020-06-10
相关资源
最近更新 更多