2015-03-25 1 views
0

Я использую встроенную модель пользователя для хранения информации о пользователе в своем приложении. Однако при регистрации нового пользователя я хочу, чтобы имя пользователя было уникальным. Для этого я решил переопределить метод clean_username в моей модели. Вот мой forms.py файлТип Ошибка при использовании пользовательского метода clean_ <fieldname> в django

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

class Registration_Form(forms.ModelForm): 
    password=forms.CharField(widget=forms.PasswordInput()) 
    class Meta: 
     model=User 
     fields=['first_name', 'last_name', 'username', 'email', 'password'] 

    def clean_username(self): 
     value=self.cleaned_data['username'] 
     if User.objects.filter(username=value[0]): 
      raise ValidationError(u'The username %s is already taken' %value) 
     return value 

А вот мой views.py файл

from django.shortcuts import render 
from django.shortcuts import redirect 

# Create your views here. 
from django.contrib.auth.models import User 
from registration.forms import Registration_Form 

def register(request): 
    if request.method=="POST": 
     form=Registration_Form(request.POST) 
     if form.is_valid(): 
      unm=form.cleaned_data('username') 
      pss=form.cleaned_data('password') 
      fnm=form.cleaned_data('first_name') 
      lnm=form.cleaned_data('last_name') 
      eml=form.cleaned_data('email') 
      u=User.objects.create_user(username=unm, password=pss, email=eml, first_name=fnm, last_name=lnm) 
      u.save() 
      return render(request,'success_register.html',{'u':u}) 
    else: 
     form=Registration_Form() 
    return render(request,'register_user.html',{'form':form}) 

Однако по нажатию на кнопку отправки формы я получаю эту ошибку

Тип Exception: TypeError Исключительное значение:
Объект 'dict' не может быть вызван Исключение Место: /home/srai/project_x/registration/views.py в регистре, строка 12

линия в вопросе это

ЕНД = form.cleaned_data («имя пользователя»)

Может кто-нибудь пожалуйста, скажите мне, почему возникает эта ошибка и как ее решить. Спасибо.

ответ

1

Во-первых, ошибка не имеет ничего общего с вашим обычным методом очистки, это происходит в представлении.

Это просто, что вы должны использовать квадратные скобки для доступа Dict элементов, а не круглые скобки:

unm=form.cleaned_data['username']