Ich habe eine Vorlage Seite erwartet zwei Formen. Wenn ich ein Formular nur verwenden, sind die Dinge in Ordnung, in diesem typischen Beispiel:Die richtige Art, mehrere Formulare auf einer Seite in Django zu behandeln
if request.method == 'POST':
form = AuthorForm(request.POST,)
if form.is_valid():
form.save()
# do something.
else:
form = AuthorForm()
Wenn ich will, aber mit mehreren Formularen arbeitet, wie lasse ich die Ansicht, dass ich nur eine der Formen bin einreichen und nicht der andere (dh es ist immer noch request.POST, aber ich möchte nur das Formular bearbeiten, für das das Senden passiert ist)?
Dies ist die Lösung auf der Antwort basiert wo expectedphrase und bannedphrase sind die Namen der Senden-Schaltflächen für die verschiedenen Formen und expectedphraseform und bannedphraseform die Formulare.
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')
Gibt es nicht einen logischen Fehler mit Ihrer Lösung? Wenn Sie "bannedphrase" posten, wird das erwartete Passwort nicht ausgefüllt. – Ztyx
Dies wird nur ein Formular zu einer Zeit behandeln, die Frage ist über die gleichzeitige Verarbeitung der Formulare – shining