创建类实例时如何以及为何引发类方法

时间:2014-03-03 08:34:26

标签: python django

当我在view.py

中创建类实例时,我无法理解为什么以及如何引发 RegistrationForm 类方法 clean_username

my form.py

class RegistrationForm(forms.Form):
    firm_name         = forms.CharField()
    username              = forms.CharField()
    def clean_username(self):
        print "inside clean_username ..I don know how this called"
        if db.firm.find(username =self.cleaned_data['username']):
            raise forms.ValidationError((u'This username is already taken. Please choose another.'))
        return self.cleaned_data['username']

我的view.py

def main(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/thanks/")
    else:
        form = RegistrationForm()
    return render(request, "registration.html", {
        'form': form,
    })

这会打印出来“在clean_username里面..我不知道这是怎么称呼的”

根据我的理解,类方法clean_username()不应该被运行,直到像form.clean_username()

这样被激活。

1 个答案:

答案 0 :(得分:2)

该方法由django自动调用,作为表单和字段验证的一部分。

请参阅django documentation here

  

表单的验证分为几个步骤,即可   定制或覆盖:

     

表单子类中的clean_<fieldname>()方法 - 其中<fieldname>替换为表单字段属性的名称。   此方法执行特定于该特定的任何清洁   属性,与其所在字段的类型无关。这个方法是   没有传递任何参数。