Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

unicode' object has no attribute 'get' in Django

Tags:

django

I am trying to follow the [Django Tutorial 6][1] to do the user authenication. But i get stuck. I am getting this Attribute error: unicode' object has no attribute 'get'. The models,view and forms are provided below. Not sure where the error is... Need some help...

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

error:

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'
like image 502
lakshmen Avatar asked Aug 26 '12 07:08

lakshmen


1 Answers

You're returning password from the clean() method, rather than self.cleaned_data.

like image 70
Daniel Roseman Avatar answered Oct 12 '22 23:10

Daniel Roseman