django: BooleanField, как установить значение по умолчанию true?

107

Я использую BooleanField в django. По умолчанию флажок, сгенерированный им, не установлен, я хочу, чтобы состояние было проверено по умолчанию, как это сделать?

Бин Чен
источник

Ответы:

185

Если вы просто используете ванильную форму (не 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})
Майкл С. О'Коннор
источник
2
Спасибо form = MyForm(initial={'my_field':True}), я не сразу нашел в документации.
Пако
Ответ на этот вопрос на самом деле не так : начальное значение не по умолчанию значения , как указано в @DW ответа
замороженный
142
from django.db import models

class Foo(models.Model):
    any_field = models.BooleanField(default=True)
Вайбхав Шарма
источник
1
Где это задокументировано? В документации есть упоминание initial(для несвязанной формы), но нетdefault
пользователь
7
в этом ответе отвечающий использует поле модели, а не поле формы. Вот в чем разница. Это сбило меня с толку, потому что я пропустил его, просто чтобы увидеть kwarg по умолчанию. По умолчанию недопустимые формы. Форма kwarg. Просто хотел опубликовать это, чтобы немного прояснить этот ответ, так как к нему нет комментариев.
Джош Браун
Это работает только для полей модели формы. Кроме того, изменение модели по умолчанию только для отображения начального значения по-другому - это немного, особенно когда так просто установить начальное значение.
guival
начальный - из более старого Django. docs.djangoproject.com/en/2.0/ref/models/fields/#booleanfield
Sharpless512
6

Я использую 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)
DW
источник
Действительно для Django 3.0тоже. Спасибо.
заморожено
0

В DJango 3.0 значение по умолчанию BooleanField в model.py устанавливается следующим образом:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
VicenteC
источник