145 votes

Django a défini la valeur du champ après l'initialisation d'un formulaire

J'essaie de définir le champ à 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))
 

170voto

Grant Points 1159

Puisque vous n'êtes pas en passant dans les données POST, je vais supposer que ce que vous essayez de faire est de définir une valeur initiale qui sera affiché dans le formulaire. La façon dont vous le faire est avec l' initial mot-clé.

form = CustomForm(initial={'Email': GetEmailString()})

Voir le Django Forme docs pour plus d'explication.

Si vous essayez de modifier une valeur, une fois que le formulaire a été soumis, vous pouvez utiliser quelque chose comme:

if form.is_valid():
    form.cleaned_data['Email'] = GetEmailString()

Vérifiez le référencés docs ci-dessus pour en savoir plus sur l'aide d' cleaned_data

108voto

Josh Points 2820

Si vous avez déjà initialisé le formulaire, vous pouvez utiliser la propriété initiale du champ. Par exemple,

 form = CustomForm()
form.fields["Email"].initial = GetEmailString()
 

13voto

Milo Price Points 367

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é:

 form = FormType(request.POST)
if request.method == "POST":
    formcopy = form(request.POST.copy())
    formcopy.data['Email'] = GetEmailString()
 

-11voto

Nigel Cohen Points 1

Une autre façon de le faire, si vous avez déjà initialisé un formulaire (avec ou sans données) et que vous devez ajouter des données avant de l'afficher:

 form.data['Email] = GetEmailString()
 

Prograide.com

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.

Powered by:

X