J'essaie de définir le champ sur une certaine valeur après l'initialisation du formulaire.
Par exemple, j'ai la classe suivante.
class CustomForm(forms.Form):
Email = forms.EmailField(min_length=1, max_length=200)
Dans la vue, je veux pouvoir faire quelque chose comme ceci:
form = CustomForm()
form["Email"] = GetEmailString()
return HttpResponse(t.render(c))
ModelChoiceField
toujours donne invalid_choice quand je lui donne uneinitial
valeur :(form.data['Email'] = GetEmailString()
et ça marcheform.fields['Email'].initial = GetEmailString()
Leform.fields['keyword'].initial
vous donne accès pour initialiser vos valeurs même après avoir instancié votre formulaireSi vous avez déjà initialisé le formulaire, vous pouvez utiliser la propriété initiale du champ. Par exemple,
la source
Si vous souhaitez le faire dans la
__init__
méthode du formulaire pour une raison quelconque, vous pouvez manipuler leinitial
dict:la source
Quelque chose comme celui de Nigel Cohen fonctionnerait si vous ajoutiez des données à une copie de l'ensemble de données de formulaire collecté:
la source
data[form.add_prefix('Email')]
pour tenir compte des cas où un préfixe est défini.form.data = form.data.copy()
modelform_factory
. De cette façon, vous pouvez générer une classe Form qui ne contient pas les champs dont vous ne voulez pas. Il est très dangereux d'avoir une classe Form qui contient des champs qui ne sont pas rendus car l'objet de formulaire acceptera toujours des données pour les champs non rendus. Un attaquant pourrait utiliser cela à son avantage.Si vous avez initialisé le formulaire comme ceci
puis la méthode correcte à partir de janvier 2019 est d'utiliser
.initial
pour remplacer les données. Cela remplacera les données dans leintial
dict qui accompagne le formulaire. Cela fonctionne également si vous avez initialisé à l'aide d'une instance telle queform = CustomForm(instance=instance)
Pour remplacer des données dans le formulaire, vous devez
En généralisant ce serait,
la source
Modifiez simplement votre champ Form.data:
la source
Pour jeter encore une autre manière dans le mix: cela fonctionne aussi, avec une notation un peu plus moderne. Cela fonctionne juste autour du fait que a
QueryDict
est immuable.la source
dans le widget, utilisez «value» attr. Exemple:
la source
Une autre façon de faire cela, si vous avez déjà initialisé un formulaire (avec ou sans données), et que vous devez ajouter des données supplémentaires avant de l'afficher:
la source