Vous n'êtes pas identifié(e).
Bonjour,
Je souhaite mettre deux formulaires différents sur une même page.
<form method="post" action="{% url 'creation' %}">{% csrf_token %}
<ul>
<li>{{ form1.code.label }} {{ form1.code }}</li>
<li>{{ form1.nom.label }} {{ form1.nom }}</li>
<li>{{ form1.pays.label }} {{ form1.pays }}</li>
</ul>
{{ form1.errors }}
<p><input type="submit" value="Enregistrer" name="save1"/></p>
</form>
<br><br>
Ajouter un Pays<br>
<form method="post" action="{% url 'creation' %}">{% csrf_token %}
{{ form2 }}
<p><input type="submit" value="Enregistrer" name="save2"/></p>
</form>
Je souhaite différencier l'action des submits. J'ai donc fait ma vue comme suit :
def clients(request):
if request.method == 'POST':
_formClient = ClientForm(request.POST)
_formPays = PaysForm(request.POST)
if 'saveClt' in request.POST :
if _formClient.is_valid():
_formClient.save()
if 'savePays' in request.POST :
if _formPays.is_valid():
_formPays.save()
else:
_formClient = ClientForm()
_formPays = PaysForm()
return render(request, 'Clients.html', {
"form1": _formClient,
"form2": _formPays,
})
Malheureusement si je clique sur l'input "lié" à form2 des erreurs apparaîsent dans form1 ... ceci est un peu normal puisque je n'ai rien renseigné, mais en théorie il ne devrait même pas y avoir d'appel, non ?
Je trouvé plusieurs manières de faire ce que je souhaite sur le net, mais pour le moment je n'ai réussi à en faire fonctionner correctement aucune.
Une idée ???
Bon ap' à tous.
Hors ligne
C'est normal, lorsque le formulaire est traité, ta vue vérifie également
les infos de l'autre formulaire. Soit tu valides les 2 en même temps. 1
seul bouton.
Soit tu passes par ajax, avec une vue pour chaque bouton
Mais le plus simple de faire une formulaire par page... et encore mieux, si
tu veux que ce soit propre, tu l'ouvres dans une fenêtre modale.
-------------------------------------------
FDV
Le 4 septembre 2014 12:13, Charlie Gentil <ceg _AT_ redaction-developpez.com> a
écrit :
> Bonjour,
>
>
>
> Je souhaite mettre deux formulaires différents sur une même page.
>
>
>
>
>
> <form method="post" action="{% url 'creation' %}">{% csrf_token %}
>
>
>
> <ul>
>
> <li>{{ form1.code.label }} {{ form1.code }}</li>
>
> <li>{{ form1.nom.label }} {{ form1.nom }}</li>
>
> <li>{{ form1.pays.label }} {{ form1.pays }}</li>
>
> </ul>
>
> {{ form1.errors }}
>
>
>
> <p><input type="submit" value="Enregistrer" name="save1"/></p>
>
> </form>
>
> <br><br>
>
>
>
> Ajouter un Pays<br>
>
> <form method="post" action="{% url 'creation' %}">{% csrf_token %}
>
> {{ form2 }}
>
> <p><input type="submit" value="Enregistrer" name="save2"/></p>
>
> </form>
>
>
>
> Je souhaite différencier l'action des submits. J'ai donc fait ma vue comme
> suit :
>
>
>
> def clients(request):
>
> if request.method == 'POST':
>
> _formClient = ClientForm(request.POST)
>
> _formPays = PaysForm(request.POST)
>
>
>
> if 'saveClt' in request.POST :
>
> if _formClient.is_valid():
>
> _formClient.save()
>
> if 'savePays' in request.POST :
>
> if _formPays.is_valid():
>
> _formPays.save()
>
>
>
> else:
>
> _formClient = ClientForm()
>
> _formPays = PaysForm()
>
>
>
> return render(request, 'Clients.html', {
>
> "form1": _formClient,
>
> "form2": _formPays,
>
> })
>
>
>
> Malheureusement si je clique sur l'input "lié" à form2 des erreurs
> apparaîsent dans form1 ... ceci est un peu normal puisque je n'ai rien
> renseigné, mais en théorie il ne devrait même pas y avoir d'appel, non ?
>
>
>
> Je trouvé plusieurs manières de faire ce que je souhaite sur le net, mais
> pour le moment je n'ai réussi à en faire fonctionner correctement aucune.
>
>
>
> Une idée ???
>
>
>
> Bon ap' à tous.
>
>
>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Sinon, tu peux ajouter un paramètre dans ton url, indiquant dans ta vue,
de quel formulaire il s'agit
<formmethod="post"action="{%url'creation' 'form1'%}">{%csrf_token%}
...
...
<formmethod="post"action="{%url'creation' 'form2'%}">{%csrf_token%}
defclients(request, formUsed=False):
....
if formUsed == 'form1':
_form=ClientForm(request.POST)
elif formUsed == 'form2':
_form=PaysForm(request.POST)
if _form.is_valid():
_form.save()
....
Le 04/09/2014 12:13, Charlie Gentil a écrit :
>
> Bonjour,
>
> Je souhaite mettre deux formulaires différents sur une même page.
>
> <formmethod="post"action="{%url'creation'%}">{%csrf_token%}
>
> <ul>
>
> <li>{{form1.code.label}}{{form1.code}}</li>
>
> <li>{{form1.nom.label}}{{form1.nom}}</li>
>
> <li>{{form1.pays.label}}{{form1.pays}}</li>
>
> </ul>
>
> {{form1.errors}}
>
> <p><inputtype="submit"value="Enregistrer"name="save1"/></p>
>
> </form>
>
> <br><br>
>
> AjouterunPays<br>
>
> <formmethod="post"action="{%url'creation'%}">{%csrf_token%}
>
> {{form2}}
>
> <p><inputtype="submit"value="Enregistrer"name="save2"/></p>
>
> </form>
>
> Je souhaite différencier l'action des submits. J'ai donc fait ma vue
> comme suit :
>
> defclients(request):
>
> ifrequest.method=='POST':
>
> _formClient=ClientForm(request.POST)
>
> _formPays=PaysForm(request.POST)
>
> if'saveClt'inrequest.POST:
>
> if_formClient.is_valid():
>
> _formClient.save()
>
> if'savePays'inrequest.POST:
>
> if_formPays.is_valid():
>
> _formPays.save()
>
> else:
>
> _formClient=ClientForm()
>
> _formPays=PaysForm()
>
> returnrender(request,'Clients.html',{
>
> "form1":_formClient,
>
> "form2":_formPays,
>
> })
>
> Malheureusement si je clique sur l'input "lié" à form2 des erreurs
> apparaîsent dans form1 ... ceci est un peu normal puisque je n'ai rien
> renseigné, mais en théorie il ne devrait même pas y avoir d'appel, non ?
>
> Je trouvé plusieurs manières de faire ce que je souhaite sur le net,
> mais pour le moment je n'ai réussi à en faire fonctionner correctement
> aucune.
>
> Une idée ???
>
> Bon ap' à tous.
>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne
Bonjour,
N'ayant pas eu de réponse à ma question ci-dessous je me permets de la reposer mais légèrement différemment.
Ce que je cherche à faire pourrait être comparé à la gestion de deux submits dans un même formulaire.
Le premier pour enregistrer les valeurs du formulaire dans la BDD, le deuxième pour réinitialiser celui-ci.
D'après ce que j'ai pu voir dans la doc et sur le net, poser une condition if sur l'un des tag de l'input devrait permettre de faire ceci. Malheureusement je n'y suis pas encore parvenu.
Une petite idée ???
D'avance merci.
Bonjour,
Je souhaite mettre deux formulaires différents sur une même page.
<form method="post" action="{% url 'creation' %}">{% csrf_token %}
<ul>
<li>{{ form1.code.label }} {{ form1.code }}</li>
<li>{{ form1.nom.label }} {{ form1.nom }}</li>
<li>{{ form1.pays.label }} {{ form1.pays }}</li>
</ul>
{{ form1.errors }}
<p><input type="submit" value="Enregistrer" name="save1"/></p>
</form>
<br><br>
Ajouter un Pays<br>
<form method="post" action="{% url 'creation' %}">{% csrf_token %}
{{ form2 }}
<p><input type="submit" value="Enregistrer" name="save2"/></p>
</form>
Je souhaite différencier l'action des submits. J'ai donc fait ma vue comme suit :
def clients(request):
if request.method == 'POST':
_formClient = ClientForm(request.POST)
_formPays = PaysForm(request.POST)
if 'saveClt' in request.POST :
if _formClient.is_valid():
_formClient.save()
if 'savePays' in request.POST :
if _formPays.is_valid():
_formPays.save()
else:
_formClient = ClientForm()
_formPays = PaysForm()
return render(request, 'Clients.html', {
"form1": _formClient,
"form2": _formPays,
})
Malheureusement si je clique sur l'input "lié" à form2 des erreurs apparaîsent dans form1 ... ceci est un peu normal puisque je n'ai rien renseigné, mais en théorie il ne devrait même pas y avoir d'appel, non ?
Je trouvé plusieurs manières de faire ce que je souhaite sur le net, mais pour le moment je n'ai réussi à en faire fonctionner correctement aucune.
Une idée ???
Bon ap' à tous.
Hors ligne
Pour faire un reset tu n'as normalement pas besoin d'un bouton submit.
Un bouton reset devrait suffire.
<input type="reset" value="reset">
c.f: https://developer.mozilla.org/fr/docs/Web/HTML/Element/Input
Pour mettre deux submit dans un formulaire, il faut leur donner un nom.
<form action="/todo" method="POST">
<input type="submit" *name="save"* value="Sauvegarder">
<input type="submit" *name="save_and_add"* value="Sauvegarder et
ajouter un nouveau">
</form>
On obtiendra save=Sauvegarder ou
save_and_add=Sauvegarder%20et%20ajouter%20un%20nouveau
Comme variable POST ce qui permet de différencier lequel des boutons a
été cliqué.
if "save" in self.POST:
# save
elif "save_and_add" in self.POST:
# save_and_add
En espérant que ça t'aide.
Rémy
Hors ligne
Pourra tu ajouter un
print request.POST
dans la view
comme ça tu pourra voir ce qui arrive vraiment
Mais en gros ta demarche devrait marcher, on peut avoir deux Forms dans un
view et valider que un en utilisant un if
Par contre j'ai du mal à voir si ton *indentation* est correct (elle a
l'air fosse, mais je pense que ce le mail ...)
Galia
2014-09-08 15:53 GMT+02:00 Rémy Hubscher <hubscher.remy _AT_ gmail.com>:
> Pour faire un reset tu n'as normalement pas besoin d'un bouton submit.
> Un bouton reset devrait suffire.
>
> <input type="reset" value="reset">
>
> c.f: https://developer.mozilla.org/fr/docs/Web/HTML/Element/Input
>
> Pour mettre deux submit dans un formulaire, il faut leur donner un nom.
>
> <form action="/todo" method="POST">
> <input type="submit" *name="save"* value="Sauvegarder">
> <input type="submit" *name="save_and_add"* value="Sauvegarder et
> ajouter un nouveau">
> </form>
>
>
> On obtiendra save=Sauvegarder ou
> save_and_add=Sauvegarder%20et%20ajouter%20un%20nouveau
> Comme variable POST ce qui permet de différencier lequel des boutons a été
> cliqué.
>
> if "save" in self.POST:
> # save
> elif "save_and_add" in self.POST:
> # save_and_add
>
>
> En espérant que ça t'aide.
>
> Rémy
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Salut et merci à vous deux.
Alors pour commencer je confirme que le problème d'indentation vient bien du mail. Dans mon code c'est propre.
@Rémy :
C'est la solution que j'essaye (je m'aperçois que j'ai mal recopié le code dans ma première demande )
Voici ma fonction dans views.py :
if 'save1' in request.POST :
if _formClient.is_valid():
_formClient.save()
print(request.POST)
if 'save2' in request.POST :
if _formPays.is_valid():
_formPays.save()
print(request.POST)
où save1 et save2 sont les attributs des "name" de chaque input (2 formulaires donc deux inputs dans la même page).
@Galia :
En gros sur ma page j'ai un formulaire pour enregistrer un client et un pour ajouter un pays.
Si je souhaite enregistrer un pays c'est save2 qui devrait être dans request.POST. Voici donc le résultat de print(request.POST) :
<QueryDict: {'pays': ['ANGLETERRE'], 'savePays': ['Enregistrer']>.
Donc jusque là tout est normal. De plus le pays s'enregistre bien.
Cependant j'ai aussi une erreur qui me dit que les champs de l'autre formulaire sont manquants... (voir PJ).
Je vais essayer de mettre deux *2 inputs dans 1 seul formulaire* et de volontairement différencier l'action pour voir si ça fonctionne correctement dans ce cas là.
Merci de votre aide.
Pourra tu ajouter un
print request.POST
dans la view
comme ça tu pourra voir ce qui arrive vraiment
Mais en gros ta demarche devrait marcher, on peut avoir deux Forms dans un view et valider que un en utilisant un if
Par contre j'ai du mal à voir si ton *indentation* est correct (elle a l'air fosse, mais je pense que ce le mail ...)
Galia
2014-09-08 15:53 GMT+02:00 Rémy Hubscher <hubscher.remy _AT_ gmail.com[1]>:
Pour faire un reset tu n'as normalement pas besoin d'un bouton submit.Un bouton reset devrait suffire.
<input type="reset" value="reset">
c.f: https://developer.mozilla.org/fr/docs/Web/HTML/Element/Input[2]
<form action="/todo" method="POST"> <input type="submit" *name="save"* value="Sauvegarder"> <input type="submit" *name="save_and_add"* value="Sauvegarder et ajouter un nouveau"></form>
save=Sauvegarder ou save_and_add=Sauvegarder%20et%20ajouter%20un%20nouveau
if "save" in self.POST: # saveelif "save_and_add" in self.POST: # save_and_add
django _AT_ lists.afpy.org[3]
http://lists.afpy.org/mailman/listinfo/django[4]
Hors ligne
Re,
Bon j'ai fait un test avec deux input dans le même formulaire. Du coté de views.py ça donne ça :
if _formClient.is_valid():
if 'save1' in request.POST :
_formClient.save()
print(request.POST)
if 'save2' in request.POST :
retourClient = _formClient.save(commit=False)
retourClient.code = "toto2"
retourClient.save()
print(request.POST)
et là ça fonctionne parfaitement bien. Question : deux formulaires dans la même views.py c'est possible ?
++
Charlie
Salut et merci à vous deux.
Alors pour commencer je confirme que le problème d'indentation vient bien du mail. Dans mon code c'est propre.
@Rémy :
C'est la solution que j'essaye (je m'aperçois que j'ai mal recopié le code dans ma première demande )
Voici ma fonction dans views.py :
if 'save1' in request.POST :
if _formClient.is_valid():
_formClient.save()
print(request.POST)
if 'save2' in request.POST :
if _formPays.is_valid():
_formPays.save()
print(request.POST)
où save1 et save2 sont les attributs des "name" de chaque input (2 formulaires donc deux inputs dans la même page).
@Galia :
En gros sur ma page j'ai un formulaire pour enregistrer un client et un pour ajouter un pays.
Si je souhaite enregistrer un pays c'est save2 qui devrait être dans request.POST. Voici donc le résultat de print(request.POST) :
<QueryDict: {'pays': ['ANGLETERRE'], 'savePays': ['Enregistrer']>.
Donc jusque là tout est normal. De plus le pays s'enregistre bien.
Cependant j'ai aussi une erreur qui me dit que les champs de l'autre formulaire sont manquants... (voir PJ).
Je vais essayer de mettre deux *2 inputs dans 1 seul formulaire* et de volontairement différencier l'action pour voir si ça fonctionne correctement dans ce cas là.
Merci de votre aide.
Pourra tu ajouter un
print request.POST
dans la view
comme ça tu pourra voir ce qui arrive vraiment
Mais en gros ta demarche devrait marcher, on peut avoir deux Forms dans un view et valider que un en utilisant un if
Par contre j'ai du mal à voir si ton *indentation* est correct (elle a l'air fosse, mais je pense que ce le mail ...)
Galia
2014-09-08 15:53 GMT+02:00 Rémy Hubscher <hubscher.remy _AT_ gmail.com[1]>:
Pour faire un reset tu n'as normalement pas besoin d'un bouton submit.Un bouton reset devrait suffire.
<input type="reset" value="reset">
c.f: https://developer.mozilla.org/fr/docs/Web/HTML/Element/Input[2]
<form action="/todo" method="POST"> <input type="submit" *name="save"* value="Sauvegarder"> <input type="submit" *name="save_and_add"* value="Sauvegarder et ajouter un nouveau"></form>
save=Sauvegarder ou save_and_add=Sauvegarder%20et%20ajouter%20un%20nouveau
if "save" in self.POST: # saveelif "save_and_add" in self.POST: # save_and_add
django _AT_ lists.afpy.org[3]
http://lists.afpy.org/mailman/listinfo/django[4]
Hors ligne