2012-08-26 31 views
5

私は[Djangoチュートリアル6] [1]に従ってユーザー認証を行っています。しかし、私は立ち往生します。私はこの属性エラーを取得しています:unicode 'オブジェクトには属性' get 'がありません。モデル、ビュー、フォームは以下の通りです。エラーがどこにあるか確認してください...いくつかの助けを必要としない...unicode 'オブジェクトには、Djangoで' get '属性がありません

models.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 

views.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)) 

forms.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' 
+0

エラーはどこですか?バックトレースはありますか? – Rohan

+0

質問を完全なトレースバックで更新してください。 –

答えて

7

self.cleaned_dataではなくclean()メソッドからpasswordが返されます。

+0

なぜそれがself.cleaned_dataであるべきか説明できますか?パスワードはありませんか?私はうまく働いていますが、私はなぜそれがそうであるのか理解していません。 – lakesh

+2

'clean'はフォーム全体の一般的な検証メソッドなので、フォームのデータ全体を返す必要があります。 –

+0

ありがとう...もしそれがclean_password関数なら、私は正しいパスワードだけを返すことができますか?または、私はまだその場合にもきれいにされたデータを渡す必要がありますか? – lakesh

関連する問題