Ho creato una bella forma e una complicata funzione di "add" per gestirla. Si inizia così ...Modulo di modifica di Django basato sul modulo di aggiunta?
def add(req):
if req.method == 'POST':
form = ArticleForm(req.POST)
if form.is_valid():
article = form.save(commit=False)
article.author = req.user
# more processing ...
Ora io non voglio davvero duplicare tutto ciò che la funzionalità nel metodo edit()
, così ho pensato edit
potrebbe utilizzare lo stesso esatto modello, e forse basta aggiungere un campo a id
il modulo in modo che la funzione add
sapesse cosa stava modificando. Ma ci sono un paio di problemi con questo
- Dove vorrei impostare
article.id
neladd
func? Dovrebbe essere dopoform.save
perché è lì che viene creato l'articolo, ma non lo raggiungerebbe mai, perché il modulo non è valido a causa di vincoli univoci (a meno che l'utente non abbia modificato tutto). Posso semplicemente rimuovere il controllois_valid
, ma al posto diform.save
esito negativo. - Se il modulo in realtà è non valido, il campo I aggiunto dinamicamente nella funzione di modifica non viene mantenuto.
Quindi, come faccio a gestire questo?
Sì, è un 'ModelForm'. Avevo bisogno di 'commit = False' per altri motivi. Un articolo è composto da un sacco di cose (incluse alcune relazioni m2m). Non penso * che volesse lavorare con 'instance'. Darò questa prova però. – mpen
In tal caso, suggerirei di inserire le relazioni m2m (e così via) nel salvataggio/convalida nel modulo anziché nella vista ... o sovrascrive il metodo di salvataggio o, eventualmente, guarda nei formulari. Immagino che dipenda dal contesto in cui stai lavorando ... –
Ottimo e completo esempio! Grazie! Ho imparato più che la giusta soluzione a questa domanda. – hobbes3