我的表格如下:
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})
答案 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)