Mam stronę szablonu oczekującą dwóch formularzy. Jeśli użyję tylko jednego formularza, wszystko będzie w porządku, jak w tym typowym przykładzie:
if request.method == 'POST':
form = AuthorForm(request.POST,)
if form.is_valid():
form.save()
# do something.
else:
form = AuthorForm()
Jeśli jednak chcę pracować z wieloma formularzami, w jaki sposób mogę poinformować widok, że przesyłam tylko jeden formularz, a nie drugi (tj. Nadal jest to request.POST, ale chcę przetworzyć tylko formularz, dla którego przesłano stało się)?
Jest to rozwiązanie oparte na odpowiedzi, w której oczekiwane wyrażenia i zbanowane wyrażenia to nazwy przycisków wysyłania dla różnych formularzy, a oczekiwane wyrażenia i zbanowane wyrażenia to formularze.
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')