130 votes

Django ModelForm : À quoi sert save(commit=False) ?

Pourquoi est-ce que j'utiliserais save(commit=False) au lieu de simplement créer un objet de formulaire à partir de la ModelForm et en exécutant is_valid() pour valider à la fois le formulaire et le modèle ?

En d'autres termes, ce qui est save(commit=False) pour ?

Si cela ne vous dérange pas, pourriez-vous nous présenter des situations hypothétiques où cela pourrait être utile ?

2voto

Dev shah Points 21

Ce que je comprends, c'est que l'on passe d'une instance de "formulaire" à une instance de "modèle" particulière dans la vue.

Supposons que je veuille poster une réponse comme celle-ci sur StackOverflow. Le code serait le suivant :

# Create a form instance with POST data.
>>> form_data = AnswerForm(request.POST)

# Create, but don't save the new answer instance.
>>> Answer = form_data.save(commit=False)

Nous devons maintenant ajouter le propriétaire de cette réponse et la sauvegarder dans notre base de données dans la page d'affichage comme ceci :

>>> Answer.owner = request.user

>>> Answer.save()

Ainsi, nous pouvons ajouter le propriétaire de cette réponse, ce que nous ne pouvons pas faire comme form_data.owner = request.user dans la page d'affichage et pas non plus dans la classe du formulaire.

En fait, il passe de l'instance "formulaire" à l'instance "modèle", puis vous permet de modifier les données et de les enregistrer.

1voto

Shubham Sarda Points 21

En d'autres termes, nous mettons à jour l'objet formulaire et lui faisons savoir qu'il ne faut pas enregistrer les valeurs dans la base de données pour le moment, nous pourrions modifier certaines entrées avec l'instance et ensuite utiliser .save() pour enregistrer toutes les valeurs dans la base de données.

Cela nous donne la possibilité de récupérer toutes les valeurs du formulaire HTML et de les personnaliser en fonction de nos besoins, puis de sauvegarder l'instance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X