Réponses:
Si vous utilisez simplement un formulaire vanille (pas un ModelForm), vous pouvez définir une valeur initiale Field ( https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.Field. initial ) comme
class MyForm(forms.Form):
my_field = forms.BooleanField(initial=True)
Si vous utilisez un ModelForm, vous pouvez définir une valeur par défaut sur le champ de modèle ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), qui s'appliquera au ModelForm résultant , comme
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
Enfin, si vous souhaitez choisir dynamiquement à l'exécution si votre champ sera sélectionné par défaut ou non, vous pouvez utiliser le paramètre initial du formulaire lorsque vous l' initialisez :
form = MyForm(initial={'my_field':True})
from django.db import models
class Foo(models.Model):
any_field = models.BooleanField(default=True)
initial
dans la documentation (pour la forme non liée), mais pasdefault
J'utilise django == 1.11. La réponse à obtenir le plus de votes est en fait fausse. En vérifiant le document de django, il est dit:
initial - Une valeur à utiliser dans l'affichage initial de ce champ. Cette valeur n'est pas utilisée comme solution de secours si les données ne sont pas fournies.
Et si vous creusez dans le code du processus de validation du formulaire, vous constaterez que, pour chaque champ, le formulaire appellera son widget value_from_datadict
pour obtenir la valeur réelle, c'est donc l'endroit où nous pouvons injecter la valeur par défaut.
Pour ce faire BooleanField
, nous pouvons hériter de CheckboxInput
, remplacer la valeur par défaut value_from_datadict
et la init
fonction.
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)
Utilisez ensuite ce widget lors de la création BooleanField
.
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Django 3.0
aussi. Merci.
form = MyForm(initial={'my_field':True})
, je ne l'ai pas trouvé tout de suite dans la documentation.