Lorsque vous travaillez avec plusieurs formulaires sur une seule page de modèle Django, identifier quel formulaire a été soumis peut être un défi. Cette question aborde le problème et fournit une solution à l'aide de préfixes de formulaire.
Si un seul formulaire est utilisé, l'approche standard consiste à vérifier la méthode de demande et à traiter le formulaire en conséquence :
if request.method == 'POST': form = AuthorForm(request.POST,) if form.is_valid(): form.save() # do something. else: form = AuthorForm()
Cependant, avec plusieurs formulaires, déterminer lequel traiter tout en ne recevant qu'un seul objet request.POST peut être délicat. La solution proposée dans cette question implique l'utilisation de préfixes de formulaire, permettant à la vue de différencier les formulaires.
La solution fournie crée deux instances de formulaire, une pour chaque formulaire attendu, puis inspecte les valeurs du bouton de soumission dans le POST. données. En utilisant des préfixes dans les noms de formulaires et les noms de boutons de soumission, le code peut déterminer quel formulaire a été soumis :
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')
Cette approche gère efficacement plusieurs formulaires sur une seule page Django, garantissant que seul le formulaire prévu est traité. et validé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!