2014-03-03 50 views
0

一个类的实例类方法诱发我无法理解为什么和如何RegistrationForm类方法的时候,我在我的view.py创建类的实例clean_username是诱发如何以及为什么在创建

我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()

回答

2

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

django documentation here

窗体的验证被分成几个步骤,其可以被 定制或覆盖:

clean_<fieldname>()方法的形式的子类 - ,其中<fieldname>被替换为表单字段属性的名称。 此方法执行特定于特定 属性的任何清理,与它所在的字段类型无关。此方法是 未传递任何参数。

+0

谢谢......当我直接调用方法时,我吓坏了 –

相关问题