2017-02-16 29 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): 
     ....