2017-02-16 5 views
0

ich einen Fehler bekam:KeyError bei/accounts/regist/

KeyError at /accounts/regist/ 'email'.

Zuvor hatte meinen Benutzeranmeldeformular Benutzername Passwort & Spalte nur. Ich möchte E-Mail-Formular hinzufügen, also habe ich es geschrieben. Aber ich habe den Fehler bekommen. Ich importierte:

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

Und meine auth_user Tabelle hat E-Mail-Spalte, so dass ich nicht weiß, wie Sie es beheben. ich in test.py schrieb

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

in serializers.py

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) 

in 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' 

In diesen Codes I der E-Mail-column.So, was soll ich Um es zu reparieren?

Traceback zeigt

/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

Sie müssen den tatsächlichen Testfall, die Ansicht und den vollständigen Traceback anzeigen. –

+0

Die [UserCreationForm] (https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.forms.UserCreationForm) hat kein E-Mail-Feld, ich verstehe nicht Was erhoffst du dir, indem du eins hinzufügst? Müssen Sie Djangos überschreiben? – Sayse

+0

@Sayse Thx, ur Kommentare. Ich möchte E-Mail-Authentifizierungssystem hinzufügen. Jetzt hat meine App Benutzername & Passwort-Authentifizierungssystem. – user7523656

Antwort

0

nach Ihrem Teil-Stack Trace, Code Würgen, wenn versucht wird, die Widget für das E-Mail-Feld zu definieren. Aber wo ist dieses Feld definiert? Es ist nirgends definiert. Ihr Code sollte wie folgt geändert werden:

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