我的表单的is_valid方法返回false

时间:2016-08-01 09:27:27

标签: python django django-forms django-views

我的表格如下:

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 个答案:

答案 0 :(得分: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)