Eu tenho uma página de modelo esperando dois formulários. Se eu apenas usar um formulário, tudo ficará bem como neste exemplo típico:
if request.method == 'POST':
form = AuthorForm(request.POST,)
if form.is_valid():
form.save()
# do something.
else:
form = AuthorForm()
No entanto, se eu quiser trabalhar com vários formulários, como faço para que a visualização saiba que estou enviando apenas um e não o outro (ou seja, ainda é request.POST, mas quero apenas processar o formulário para o qual o envio foi enviado) aconteceu)?
Esta é a solução baseada na resposta em que a frase esperada e a frase banida são os nomes dos botões de envio para os diferentes formulários, e a forma esperada e o formulário bannedphrase são os formulários.
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')