У меня есть приложение, которое использует следующую форму:
class ConfirmForm(forms.Form):
account_name = forms.CharField(widget=forms.HiddenInput)
up_to_date = forms.BooleanField(initial=True)
Я использую форму в следующем шаблоне exerpt:
<form class="confirmform" action="/foo/" enctype="multipart/form-data" method="post">
{{ confirm_form.up_to_date }} Check if this data brings the account up to date.<br>
{{ confirm_form.account_name }} <input type="submit" name="confirm" value="Confirm" />
</form>
В моем представлении используется следующая базовая структура кода:
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: "Это поле необходимо".
Я прочитал этот похожий вопрос, но его решение не относится к моему проекту.
Итак... что происходит?
Edit:
Я обновил приведенный выше код, чтобы быть более верным моему фактическому коду.
Проблема №1 была моей ошибкой, потому что я переопределял начальное значение путем привязки данных при создании экземпляра формы.
Проблема №2 Я все еще рассматриваю проблему. Использование required=False
на up_to_date
устранит проблему, однако не представляется правильным, что с использованием виджета по умолчанию a BooleanField
может быть либо NULL
(вызывает проверку достоверности) или True
, но никогда False
.