5

我正在尝试按照 [Django Tutorial 6][1] 进行用户身份验证。但我卡住了。我收到此属性错误:unicode' 对象没有属性'get'。模型、视图和表格如下。不知道错误在哪里......需要一些帮助......

模型.py

from django.db import models
from django.contrib.auth.models import User

class Drinker(models.Model):

    user = models.OneToOneField(User)
    birthday = models.DateField()
    name = models.CharField(max_length=100)

    def __unicode__(self):
        return self.name

视图.py

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from drinker.forms import RegistrationForm
from django.contrib.auth.models import User
from drinker.models import Drinker


def DrinkerRegistration(request):
    if request.POST:
        form =RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(username=form.cleaned_data['username'],email=form.cleaned_data['email'])
            password = form.cleaned_data['password']
            user.save()
            drinker=Drinker(user=user,name=form.cleaned_data['name'],birthday=form.cleaned_data['birthday'])
            drinker.save()
            return HttpResponseRedirect('/profile/')
        else:
            return render_to_response('register.html',{'form':form,},context_instance=RequestContext(request))
    else:
        form = RegistrationForm()
        return render_to_response('register.html',{'form':form,},context_instance=RequestContext(request))

表格.py

from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
from drinker.models import Drinker 

class RegistrationForm(ModelForm):
    username = forms.CharField(label=(u'User Name'))
    email = forms.EmailField(label =(u'Email Address'))
    password = forms.CharField(label =(u'Password'),widget=forms.PasswordInput(render_value=False))
    password1 = forms.CharField(label =(u'Verify Password'),widget=forms.PasswordInput(render_value=False))

    class Meta:
        model = Drinker
        exclude = ('user',)

    def clean_username(self):
        username = self.cleaned_data['username']
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError("That username is already taken. Please select another")
    def clean(self):
        password = self.cleaned_data['password']
        password1= self.cleaned_data['password1']
        if password and password1 and password != password1:
            raise forms.ValidationError("The passwords did not match. Please try again")
        return password

错误:

Environment:


Request Method: POST

Django Version: 1.4
Python Version: 2.7.1
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'drinker')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/Users/cnnlakshmen_2000/Projects/env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Users/cnnlakshmen_2000/Projects/Permissions/drinker/views.py" in DrinkerRegistration
  12.       if form.is_valid():
File "/Users/cnnlakshmen_2000/Projects/env/lib/python2.7/site-packages/django/forms/forms.py" in is_valid
  124.         return self.is_bound and not bool(self.errors)
File "/Users/cnnlakshmen_2000/Projects/env/lib/python2.7/site-packages/django/forms/forms.py" in _get_errors
  115.             self.full_clean()
File "/Users/cnnlakshmen_2000/Projects/env/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
  272.         self._post_clean()
File "/Users/cnnlakshmen_2000/Projects/env/lib/python2.7/site-packages/django/forms/models.py" in _post_clean
  311.         exclude = self._get_validation_exclusions()
File "/Users/cnnlakshmen_2000/Projects/env/lib/python2.7/site-packages/django/forms/models.py" in _get_validation_exclusions
  297.                 field_value = self.cleaned_data.get(field, None)

Exception Type: AttributeError at /register/
Exception Value: 'unicode' object has no attribute 'get'
4

1 回答 1

7

passwordclean()方法返回,而不是self.cleaned_data.

于 2012-08-26T08:31:26.853 回答