Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的表格&x27;s is_valid方法返回false_Python_Django_Django Forms_Django Views - Fatal编程技术网

Python 我的表格&x27;s is_valid方法返回false

Python 我的表格&x27;s is_valid方法返回false,python,django,django-forms,django-views,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) d

我有以下表格:

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\u valid
返回false!我已经检查了
form.errors
并且它是空的,
form.data
是空的,form.is\u 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})

如果是post请求,则需要将post数据传递给表单

if request.method == 'POST':
    c = Cook.objects.all()[0]
    form = CookDuty(cook=c, data=request.POST)
如果没有post数据,表单将被解除绑定,因此将始终无效

有关更多信息,请参阅上的文档

第二个问题是
ChoiceField
字段(用于选择单个选项)与
CheckboxSelectMultiple
小部件(用于选择多个选项)不兼容。如果要选择多个选项,则需要使用而不是
ChoiceField

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

现在它已绑定,但仍然无效。当我打印错误时,我得到以下信息:
  • duty
    • 选择一个有效的选项。[';比萨饼';]不是可用的选择之一。
它就像一个复选框。选择怎么可能是无效的@阿拉斯代尔那是另一个问题。我认为问题在于你的小部件与字段不匹配。查看我的更新答案。您需要使用。是的,这就是CheckboxSelectMultiple小部件的用途。