Ответы:
Если вы просто используете ванильную форму (не ModelForm), вы можете установить начальное значение поля ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field. начальный ) как
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
Если вы используете ModelForm, вы можете установить значение по умолчанию в поле модели ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), которое будет применяться к полученному ModelForm , лайк
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
Наконец, если вы хотите динамически выбирать во время выполнения, будет ли ваше поле выбрано по умолчанию, вы можете использовать начальный параметр формы при ее инициализации :
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
(для несвязанной формы), но нетdefault
Я использую 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)
Django 3.0
тоже. Спасибо.
form = MyForm(initial={'my_field':True})
, я не сразу нашел в документации.