Я использую django == 1.11.Ответ получить большинство голосов на самом деле неверно.Проверяя документ из django, он говорит:
initial - значение для использования в начальном отображении этого поля.Это значение не используется как запасной вариант, если данные не предоставлены.
И если вы покопаетесь в коде проверки формы, вы обнаружите, что для каждого поля, форма будет называть это value_from_datadict
виджета, чтобы получить фактическое значение, так что это место, где мы можем ввести значение по умолчанию.
Чтобы сделать это для BooleanField
, мы можем наследовать отCheckboxInput
, переопределить стандартные функции value_from_datadict
и init
.
class CheckboxInput(forms.CheckboxInput):
def __init__(self, default=False, *args, **kwargs):
super(CheckboxInput, self).__init__(*args, **kwargs)
self.default = default
def value_from_datadict(self, data, files, name):
if name not in data:
return self.default
return super(CheckboxInput, self).value_from_datadict(data, files, name)
Затем использовать этот виджет при создании BooleanField
.
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)