Respuestas:
Si solo está utilizando un formulario básico (no un ModelForm), puede establecer un valor inicial de campo ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field. inicial ) como
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
Si está utilizando un ModelForm, puede establecer un valor predeterminado en el campo del modelo ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), que se aplicará al ModelForm resultante , me gusta
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
Finalmente, si desea elegir dinámicamente en tiempo de ejecución si su campo se seleccionará o no de forma predeterminada, puede usar el parámetro inicial del formulario cuando lo inicialice :
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
en los documentos (para el formulario independiente), pero nodefault
Estoy usando django == 1.11. La respuesta que obtiene la mayor cantidad de votos es realmente incorrecta. Verificando el documento de django, dice:
inicial: un valor para usar en la pantalla inicial de este campo. Este valor no se utiliza como respaldo si no se proporcionan datos.
Y si profundiza en el código del proceso de validación del formulario, encontrará que, para cada campo, el formulario llamará a su widget value_from_datadict
para obtener el valor real, por lo que este es el lugar donde podemos inyectar el valor predeterminado.
Para hacer esto BooleanField
, podemos heredar CheckboxInput
, anular el valor predeterminado value_from_datadict
y la init
función.
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)
Luego use este widget al crear BooleanField
.
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Django 3.0
también. Gracias.
form = MyForm(initial={'my_field':True})
, no lo encontré de inmediato en la documentación.