J'utilise BooleanField
dans Django.
Par défaut, la case à cocher qu'il génère n'est pas cochée. Je veux que l'état soit coché par défaut. Comment dois-je procéder ?
J'utilise BooleanField
dans Django.
Par défaut, la case à cocher qu'il génère n'est pas cochée. Je veux que l'état soit coché par défaut. Comment dois-je procéder ?
Si vous n'utilisez qu'un formulaire classique (pas un ModelForm), vous pouvez définir la valeur initiale d'un champ ( 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 du modèle ( https://docs.djangoproject.com/en/2.2/ref/models/fields/#default ), qui s'appliqueront au ModelForm résultant, comme par exemple
class MyModel(models.Model):
my_field = models.BooleanField(default=True)
Enfin, si vous souhaitez choisir dynamiquement, au moment de l'exécution, si votre champ sera sélectionné par défaut ou non, vous pouvez utiliser le paramètre initial du formulaire lors de l'exécution de l'opération. l'initialiser :
form = MyForm(initial={'my_field':True})
Merci pour form = MyForm(initial={'my_field':True})
Je ne l'ai pas trouvé tout de suite dans la documentation.
Cette réponse est en fait mauvais : initial valeur n'est pas par défaut valeur comme mentionné dans @D.W. respuesta
Où cela est-il documenté ? Il est fait mention de initial
dans la documentation (pour les formulaires non liés), mais pas l'option default
Dans cette réponse, le répondant utilise un champ modèle, et non un champ formulaire. C'est là que se trouve la différence. Cela m'a fait trébucher parce que j'ai sauté dessus juste pour voir le kwarg par défaut. Default n'est pas un kwarg valide de forms.Form. Je voulais juste poster cela pour clarifier un peu cette réponse, puisqu'elle n'a pas été commentée.
Cela ne fonctionne que pour les champs du modèle de formulaire. De plus, modifier le modèle par défaut juste pour afficher la valeur initiale différemment est un peu trop, surtout lorsque la définition de la valeur initiale est si simple.
J'utilise django==1.11. La réponse qui a reçu 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 est no utilisé comme solution de repli 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 appelle sa fonction du widget value_from_datadict
pour obtenir la valeur réelle, donc c'est l'endroit où nous pouvons injecter la valeur par défaut.
Pour ce faire, il faut BooleanField
nous pouvons hériter de CheckboxInput
, remplacer la valeur par défaut value_from_datadict
y 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 lorsque vous créez BooleanField
.
class ExampleForm(forms.Form):
bool_field = forms.BooleanField(widget=CheckboxInput(default=True), required=False)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.