Odpowiedzi:
Jeśli używasz tylko formularza waniliowego (a nie ModelForm), możesz ustawić wartość początkową pola ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field. początkowe ) jak
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
Jeśli używasz ModelForm, możesz ustawić domyślną wartość w polu modelu ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), która zostanie zastosowana do wynikowego ModelForm , lubić
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
Na koniec, jeśli chcesz dynamicznie wybierać w czasie wykonywania, czy twoje pole będzie domyślnie zaznaczone, czy nie, możesz użyć początkowego parametru do formularza podczas jego inicjalizacji :
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
(dla niezwiązanego formularza), ale niedefault
Używam django == 1.11. Odpowiedź, która uzyskała najwięcej głosów, jest w rzeczywistości błędna. Sprawdzając dokument z django, mówi:
początkowa - wartość do użycia w początkowym wyświetlaniu tego pola. Ta wartość nie jest używana jako rezerwa, jeśli nie podano danych.
A jeśli zagłębisz się w kod procesu walidacji formularza, zobaczysz, że dla każdego pola formularz będzie wywoływał swoje widżety, value_from_datadict
aby uzyskać rzeczywistą wartość, więc jest to miejsce, w którym możemy wstrzyknąć domyślną wartość.
Aby to zrobić BooleanField
, możemy dziedziczyć po CheckboxInput
, przesłonić domyślne value_from_datadict
i init
funkcję.
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)
Następnie użyj tego widżetu podczas tworzenia BooleanField
.
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Django 3.0
też. Dzięki.
form = MyForm(initial={'my_field':True})
, nie znalazłem tego od razu w dokumentacji.