J'ai fait une belle forme, et une grande fonction 'add' compliquée pour la manipuler. Il commence comme ça ...Django modifier le formulaire basé sur le formulaire d'ajout?
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 ...
Maintenant, je ne veux pas vraiment reproduire tout ce que la fonctionnalité dans la méthode edit()
, donc je pensais edit
pourrait utiliser exactement le même modèle, et peut-être juste ajouter un champ à id
le formulaire de sorte que la fonction add
savait ce qu'il était en train d'éditer. Mais il y a quelques problèmes avec ce
- Où puis-je mettre
article.id
dans laadd
func? Il devrait être aprèsform.save
parce que c'est là que l'article est créé, mais il ne l'atteindrait jamais, parce que le formulaire est invalide en raison de contraintes uniques (sauf si l'utilisateur a tout modifié). Je peux simplement supprimer le contrôleis_valid
, maisform.save
échoue à la place. - Si le formulaire en réalité est invalide, le champ I ajouté dynamiquement dans la fonction d'édition n'est pas conservé.
Alors, comment faire face à cela?
Oui, il est un 'ModelForm'. J'avais besoin de 'commit = False' pour d'autres raisons. Un article est composé de tout un tas de choses (y compris des relations m2m). Je ne * pense * pas qu'il voulait travailler avec 'instance'. Je vais essayer cela. – mpen
Dans ce cas, je suggérerais de mettre les relations m2m (et al) d'enregistrement/validation dans le formulaire au lieu de la vue ... soit de surcharger la méthode save, soit éventuellement, de regarder dans les formsets. Je suppose que cela dépend du contexte de ce que vous travaillez avec ... –
Un exemple parfait! Merci! J'ai appris plus que juste la solution à cette question. – hobbes3