Ho una pagina modello che prevede due moduli. Se mi basta usare una forma, le cose vanno bene come in questo esempio tipico:Modo corretto per gestire più moduli su una pagina in Django
if request.method == 'POST':
form = AuthorForm(request.POST,)
if form.is_valid():
form.save()
# do something.
else:
form = AuthorForm()
Se voglio lavorare con molteplici forme però, come faccio a lasciare che la vista so che sto presentando solo una delle forme e non l'altro (vale a dire è ancora request.POST ma voglio solo elaborare il modulo per il quale è avvenuto il submit)?
Questa è la soluzione in base alla risposta in cui expectedphrase e bannedphrase sono i nomi dei pulsanti per presentare le diverse forme e expectedphraseform e bannedphraseform sono le forme.
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')
Non c'è un errore logico con la soluzione? Se pubblichi "bannedphrase", expectedphraseform non verrà popolato. – Ztyx
Questo gestirà solo un modulo alla volta, la domanda riguarda la gestione dei moduli multipli allo stesso tempo – shining