在django </fieldname>中使用自定义clean_ <fieldname>方法时键入Error

时间:2015-03-25 21:55:14

标签: python django django-forms django-validation

我使用内置的User模型在我的应用程序中存储用户信息。 但是,在注册新用户时,我希望用户名应该是唯一的。为此,我决定覆盖模型中的clean_username方法。这是我的forms.py文件

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

但是,点击表单的提交按钮后,我收到此错误

异常类型:TypeError 例外价值:
'dict'对象不可调用 例外位置:/home/srai/project_x/registration/views.py注册,第12行

有问题的一行是

UNM = form.cleaned_data( '用户名')

任何人都可以告诉我为什么会出现这个错误,我该怎么解决它。 感谢。

1 个答案:

答案 0 :(得分:1)

首先,错误与您的自定义清理方法无关,它在视图中发生。

您只需使用方括号来访问dict项,而不是括号:

unm=form.cleaned_data['username']