django: BooleanField, как установить значение по умолчанию в true? - PullRequest
91 голосов
/ 04 марта 2011

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

Ответы [ 4 ]

157 голосов
/ 04 марта 2011

Если вы просто используете ванильную форму (не ModelForm), вы можете установить начальное значение поля (https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field.initial), например

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})
132 голосов
/ 07 января 2012
from django.db import models

class Foo(models.Model):
    any_field = models.BooleanField(default=True)
4 голосов
/ 22 апреля 2018

Я использую 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)
0 голосов
/ 08 мая 2019
from django.db import models

class Nepal(models.Model)
     Is_active = models.BooleanField(default=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...