django: BooleanField, як встановити значення за замовчуванням на true?


107

Я використовую BooleanField в джанго. За замовчуванням прапорець, породжений нею, не встановлений, я хочу, щоб стан перевірявся за замовчуванням, як це зробити?

Відповіді:


184

Якщо ви просто використовуєте форму ванілі (не 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}), що я не знайшов його одразу в документації.
Пако

Ця відповідь насправді помилкова : початкове значення не є типовим значенням, як згадується у відповіді
заморожено

142
from django.db import models

class Foo(models.Model):
    any_field = models.BooleanField(default=True)

1
Де це документально зафіксовано? У документах є згадка initial(для незв'язаної форми), але неdefault
користувач

7
у цій відповіді відповідач використовує модельне поле, а не форму форми. Ось тут і різниця. Це спалахнуло мене, тому що я пропустив через нього просто, щоб побачити kwarg за умовчанням. За замовчуванням не є дійсною формою. Форма kwarg. Просто хотів опублікувати це, щоб трохи очистити цю відповідь, оскільки до неї є 0 коментарів.
Джош Браун

Це працює лише для моделей полів форми. Крім того, змінити типовий параметр моделі просто для відображення початкового по-різному - це небагато, особливо якщо встановити початкове значення так просто.
відвід

початковий - від старшого Джанго. docs.djangoproject.com/uk/2.0/ref/models/fields/#booleanfield
Sharpless512

6

Я використовую django == 1,11. Відповідь отримати найбільше голосів насправді неправильна. Перевіряючи документ від django, він говорить:

початковий - значення, яке потрібно використовувати в початковому відображенні цього поля. Це значення не використовується як резервне, якщо дані не наводяться.

І якщо ви заглибитесь у код перевірки форми, ви побачите, що для кожного поля форма викличе, що віджет 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також. Дякую.
заморожено

0

У DJango 3.0 значення за замовчуванням BooleanField у model.py встановлюється так:

class model_name(models.Model):
example_name = models.BooleanField(default=False)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.