Форма Django с BooleanField всегда недействительна, если не отмечено

У меня есть приложение, которое использует следующую форму:

class ConfirmForm(forms.Form):
    account_name = forms.CharField(widget=forms.HiddenInput)
    up_to_date = forms.BooleanField(initial=True)

Я использую форму в следующем примере шаблона:

{{ confirm_form.up_to_date }} Check if this data brings the account up to date.
{{ confirm_form.account_name }}

В моем представлении используется следующая базовая структура кода:

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 .

46
задан Community 23 May 2017 в 12:09
поделиться