Django Forms Clean_数据密钥

2024-06-17 15:31:30 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我遇到一个奇怪的问题,我似乎无法解决。在

我有一个用于注册用户的表单。我在django1.7.4项目中有一个自定义用户模型。一切正常,但最近,如果已经存在具有相同电子邮件地址的用户,则该网站会崩溃。在

以下是线索:

Environment:


Request Method: POST
Request URL: http://mysite.dbz.dev/purchase/step1/Business

Django Version: 1.7.4
Python Version: 2.7.9
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_summernote',
 'usercp',
 'clickatell',
 'downloadcenter',
 'purchaseorder',
 'paypalrestsdk',
 'import_export',
 'debug_toolbar')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware',
 'mysite.middleware.AutoLogout',
 'mysite.middleware.LocationChecker')


Traceback:
File "/home/bs/envs/main-page/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/var/www/vhosts/main-page/purchaseorder/views.py" in step1
  194.         if form.is_valid():
File "/home/bs/envs/main-page/lib/python2.7/site-packages/django/forms/forms.py" in is_valid
  162.         return self.is_bound and not bool(self.errors)
File "/home/bs/envs/main-page/lib/python2.7/site-packages/django/forms/forms.py" in errors
  154.             self.full_clean()
File "/home/bs/envs/main-page/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
  353.         self._clean_fields()
File "/home/bs/envs/main-page/lib/python2.7/site-packages/django/forms/forms.py" in _clean_fields
  371.                     value = getattr(self, 'clean_%s' % name)()
File "/var/www/vhosts/main-page/usercp/forms.py" in clean_email2
  343.         email = self.cleaned_data["email"]

Exception Type: KeyError at /purchase/step1/Business
Exception Value: 'email'

以下是我的清洁方法:

^{pr2}$

有人知道为什么它会失败,当有一个现有的用户?在我看来,清理后的数据会被一个对象取代。但这对我来说没有意义。在


Tags: djangoinpyselfcleanhomebsmain
1条回答
网友
1楼 · 发布于 2024-06-17 15:31:30

在表单中,如果要根据多个字段进行清理,则必须执行clean方法,而不是clean_field方法:

def clean(self): # change this line
    email = self.cleaned_data.get("email")
    email2 = self.cleaned_data.get("email2")

    if email != email2:
        raise forms.ValidationError(
            self.error_messages['no_mail_match'],
            code='no_mail_match'
        )
    return email2

编辑

Michael B注释编辑

相关问题 更多 >