Моя форма is_valid метод возвращает false

57
5

У меня есть следующая форма:

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 ниже, но 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})

спросил(а) 2016-08-01T12:27:00+03:00 4 года, 1 месяц назад
1
Решение
57

Когда это почтовый запрос, вам необходимо передать данные POST в форму.

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

Без данных сообщения форма не связана, поэтому всегда будет недействительной.

Дополнительную информацию см. В документах по связанным и несвязанным формам.

Вторая проблема заключается в том, что ChoiceField поле (используется для выбора одного выбора) не совместим с CheckboxSelectMultiple виджетом (используется для выбора нескольких вариантов). Если вы хотите выбрать несколько вариантов, вам нужно использовать MultipleChoiceField вместо ChoiceField.

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

ответил(а) 2016-08-01T12:32:00+03:00 4 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема