2017-02-16 81 views
0

我得到了一个错误:KeyError异常在/帐号/注册/

KeyError at /accounts/regist/ 'email'.

之前,我的用户登记表只有用户名密码&列。我想添加电子邮件表单,所以我写了它。但我得到了错误。我导入:

django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.forms import AuthenticationForm. 

而我的auth_user表有email列,所以我不知道如何解决它。 我在test.py

from django.test import TestCase 

# Create your tests here. 
class UserTests(APITestCase): 
    def setUp(self): 
     """ 
     setUp for testing 
     """ 
     User.objects.create(username='user1', email='email1', password='user1') 
     User.objects.create(username='user2', email='email2',password='user2') 
     self.user1 = User.objects.get(username='user1') 
     self.user2 = User.objects.get(username='user2') 

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = User 
     fields = ('id', 'username','email', 'password') 
     write_only_fields = ('password') 
     read_only_fields = ('id') 

     def create(self, validated_data): 
      password = validated_data.get('password') 
      validated_data['password'] = make_password(password) 
      return User.objects.create(**validated_data) 

在forms.py

from django import forms 
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.forms import AuthenticationForm 

class RegisterForm(UserCreationForm): 
    def __init__(self, *args, **kwargs): 
     super(RegisterForm, self).__init__(*args, **kwargs) 
     self.fields['username'].widget.attrs['class'] = 'form-control' 
     self.fields['email'].widget.attrs['class'] = 'form-control' 
     self.fields['password1'].widget.attrs['class'] = 'form-control' 
     self.fields['password2'].widget.attrs['class'] = 'form-control' 

在这些代码中写道serializers.py,我指定的电子邮件column.So,我应该怎么要解决它吗?

回溯显示

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/exception.py in inner 
    39   response = get_response(request) 
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py in _get_response 
187   response = self.process_exception_by_middleware(e, request) 
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py in _get_response 
185  response = wrapped_callback(request, *callback_args, **callback_kwargs) 
accounts/views.py in regist 
65   form = RegisterForm(request.POST or None) 
▶ Local vars 
accounts/forms.py in __init__ 
11  self.fields['email'].widget.attrs['class'] = 'form-control' 
▶ Local vars 
+0

您需要显示实际测试用例,视图和完整回溯。 –

+0

[UserCreationForm](https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.forms.UserCreationForm)没有电子邮件字段,我不明白你希望通过添加一个来实现吗?你需要覆盖djangos吗? – Sayse

+0

@Sayse thx,你的意见。我想添加电子邮件认证系统。现在我的应用程序有用户名和密码认证系统。 – user7523656

回答

0

根据您的局部堆栈跟踪,试图定义电子邮件字段widget时你的代码是窒息。但是,该字段在哪里定义?它没有在任何地方定义。您的代码应该更改为:

class RegisterForm(UserCreationForm): 
    email = forms.EmailField(required = True) 
    def __init__(self, *args, **kwargs): 
     ....