2013-12-09 79 views
-2

我使用kwargs最初填充我djnago形式,Django的表單提交錯誤

  • Forms.py

    class myForm(Forms.Form): 
        textbox1 = forms.CharField() 
        dropdown1 = forms.ChoiceField() 
    
    
        def __init__(self,*args,**kwargs): 
        choices = kwargs.pop('choices') 
        super(myForm,self).__init__(*args,**kwargs) 
        self.fields['dropdown1'] = forms.ChoiceField(choices=choices) 
    
  • views.py

    def myjob(req): 
        ch = {("1","A"),("2","B")} 
        if req.method == "POST": 
        frm = myForm(data=req.POST) # throws error saying can't find choices in Forms.py 
        else: 
        frm = myForm(choices=ch) # no problem here 
    

這段代碼在提交數據時拋出錯誤正試圖再次呼叫init
如何正確提交?

+1

這個問題是不明確的。假設'req'是請求,那麼這段代碼會給你發佈的數據。請張貼實際的視圖,加上你得到的錯誤。 –

+0

請現在看看,希望它很清楚。 – rhn89

回答

1

錯誤似乎很清楚:代碼期望choices kwarg,並且您不在POST上提供它。你可以簡單地添加:

if req.method == "POST": 
    frm = myForm(data=req.POST, choices=ch) 
+0

是的,這是有效的,但是沒有像重載的init這樣的東西,所以我不必通過選擇?我對django比較陌生。 – rhn89

+1

Python沒有超載。您已經重新定義了init,以便它期望選擇。但是,如果你沒有通過它們,將會用什麼作爲'dropdown1'的可能選擇?如果Django沒有分配任何選擇,那麼Django將使用什麼來驗證該字段? –

+0

明白了,謝謝。 – rhn89