253 votes

Bonne façon de gérer des formes multiples sur une seule page dans Django

J'ai un modèle de page d'attendre deux formes. Si je viens d'utiliser un formulaire, les choses sont bien comme dans cet exemple classique:

if request.method == 'POST':
    form = AuthorForm(request.POST,)
    if form.is_valid():
        form.save()
        # do something.
else:
    form = AuthorForm()

Si je veux travailler avec de multiples formes cependant, comment puis-je laisser la vue sais que je suis en soumettant une seule des formes et pas l'autre (c'est à dire qu'il est toujours en demande.POST, mais je ne veux processus de la forme pour laquelle le soumettre arrivé)?


C'est la solution basée sur la réponse expectedphrase et bannedphrase sont les noms des boutons de soumission pour les différentes formes et expectedphraseform et bannedphraseform sont les formes.

if request.method == 'POST':
    if 'bannedphrase' in request.POST:
        bannedphraseform = BannedPhraseForm(request.POST, prefix='banned')
        if bannedphraseform.is_valid():
            bannedphraseform.save()
        expectedphraseform = ExpectedPhraseForm(prefix='expected')
    elif 'expectedphrase' in request.POST:
        expectedphraseform = ExpectedPhraseForm(request.POST, prefix='expected')
        if expectedphraseform.is_valid():
            expectedphraseform.save() 
        bannedphraseform = BannedPhraseForm(prefix='banned')
else:
    bannedphraseform = BannedPhraseForm(prefix='banned')
    expectedphraseform = ExpectedPhraseForm(prefix='expected')

173voto

Ned Batchelder Points 128913

Vous avez quelques options :

  1. Mettre des URL différentes dans l’action pour les deux formes. Vous aurez alors deux fonctions de point de vue différent pour faire face aux deux formes différentes.
  2. Lire le soumettre le bouton valeurs des données de publication. Vous pouvez indiquer la soumettre a cliqué sur bouton : Comment puis-je construire plusieurs boutons submit form django ?

51voto

Adam Nelson Points 2299

Une méthode pour référence ultérieure est quelque chose comme ça. bannedphraseform est la forme première et expectedphraseform est le second. Si l’un est touché, l’autre est ignorée (qui est une hypothèse raisonnable dans ce cas) :

16voto

Daniel Sokolowski Points 2207

Vues de classe en fonction de Django fournissent un FormView générique, mais à toutes fins utiles, il est conçu pour gérer uniquement un formulaire.

Une façon de gérer les formes multiples avec le même objectif action url à l’aide de vues génériques de Django est d’étendre le « TemplateView » comme indiqué ci-dessous ; J’utilise cette approche assez souvent que j’ai fait dans un modèle de l’IDE Eclipse.

Le modèle html va dans le sens suivant :

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