У меня есть приложение, которое использует следующую форму:
class ConfirmForm(forms.Form):
account_name = forms.CharField(widget=forms.HiddenInput)
up_to_date = forms.BooleanField(initial=True)
Я использую форму в следующем примере шаблона:
В моем представлении используется следующая базовая структура кода:
if request.method == 'POST':
#check for 'confirm' because I actually have multiple forms in this page
if 'confirm' in request.POST:
confirm_form = ConfirmForm(request.POST)
if confirm_form.is_valid():
#do stuff
else:
c['confirm_form'] = confirm_form
else:
c['confirm_form'] = ConfirmForm({'account_name':'provided_value'})
Две вещи неверны:
1 ) Несмотря на то, что у меня initial = True, флажок не установлен, когда страница загружается
2) Форма всегда недействительна, если я не установлю флажок. Он выдает ошибки только для up_to_date: «Это поле обязательно».
Я прочитал этот аналогичный вопрос , но его решение не применимо к моему проекту.
Итак ... что происходит?
Редактировать:
Я обновил приведенный выше код, чтобы он более точно соответствовал моему фактическому коду.
Проблема №1 возникла по моей вине, потому что я переопределял начальное значение путем привязки данных при создании формы.
Проблема №2 Я все еще рассматриваю проблему. Использование required = False
на up_to_date
устранит проблему, однако кажется неправильным, что при использовании виджета по умолчанию BooleanField
может быть либо NULL
(вызывает сбой проверки достоверности) или True
, но никогда False
.