2016-08-01 29 views
1

我有如下形式:我的窗體的is_valid方法返回false

class CookDuty(forms.Form): 
    # cook = None 
    def __init__(self, *args, **kwargs): 
     cook = kwargs.pop('cook') 
     super(CookDuty, self).__init__(*args, **kwargs) 
     self.fields['duty'].choices = foods_for_cook(cook) 
    duty = forms.ChoiceField(widget=forms.CheckboxSelectMultiple, required=False) 

我有一個觀點如下使用它,但form.is_valid返回false!我查了form.errors,它是空的,form.data是空的,而form.is_bound是False

def duty_list_cook(request): 
    if request.method == 'POST': 
     c = Cook.objects.all()[0] 
     form = CookDuty(cook=c) 
     if form.is_valid(): 
      print(form.cleaned_data) 
      return render(request, 'employee/cook_duty.html', {'form':form}) 

    else: 
     c = Cook.objects.all()[0] 
     form = CookDuty(cook=c) 
    return render (request, 'employee/cook_duty.html', {'form':form}) 

回答

1

當它是一個post請求時,您需要將POST數據傳遞給表單。

if request.method == 'POST': 
    c = Cook.objects.all()[0] 
    form = CookDuty(cook=c, data=request.POST) 

沒有發佈數據,表單是未綁定的,所以永遠是無效的。

有關更多信息,請參閱bound and unbound forms上的文檔。

第二個問題是ChoiceField字段(用於選擇單個選項)與CheckboxSelectMultiple小部件(用於選擇多個選項)不兼容。如果您想選擇多個選項,則需要使用MultipleChoiceField而不是ChoiceField

duty = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, required=False) 
+0

現在它被綁定,但它仍然無效。當我打印錯誤,我得到這個:

  • duty
    • 選擇一個有效的選擇。 ['披薩']不是可用選擇之一。
user63835

+0

它就像一個複選框。如何可以選擇無效? @Alasdair – user63835

+0

這是一個單獨的問題。我認爲問題在於您的小部件與該字段不匹配。看到我更新的答案。 – Alasdair

相關問題