2014-03-03 76 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

謝謝......當我直接調用方法時,我嚇壞了 –

相關問題