Django : form commit=False
Bonjour,
J'ai une question existentielle lol.
https://docs.djangoproject.com/en/4.2/topics/forms/modelforms/#the-save-method
Depuis ma formation je n'ai jamais utilisé le paramètre commit de save sur un form.
En fait j'aurais plus tendance à tout faire avant puis save en dernier :
if request.method == "POST":
form = MessageForm(request.POST)
if form.is_valid():
ticket = Ticket.objects.create(user=user)
form.instance.user = user
form.instance.ticket = ticket
form.save()
Mais c'est peut-être une mauvaise pratique ? Il vaut mieux utiliser le commit ?
Merci d'avance
Salut Gab !
Ton code fonctionne :) Il n'y a pas vraiment de "mauvaise pratique" comme tu l'imagines. Cependant, le paramètre commit de la méthode save peut devenir super utile dans certaines situations.
En gros, quand tu appelles form.save(), ça enregistre directement le formulaire dans la base de données. Mais parfois, tu voudrais peut-être faire des choses supplémentaires avec l'objet avant de le stocker réellement. C'est là que le paramètre commit=False entre en jeu.
Ce que form.save(commit=False) fait, c'est qu'il crée une instance d'objet à partir de tes données de formulaire, mais il ne le sauvegarde pas encore dans la base de données. Cela te donne l'opportunité de modifier certaines propriétés de cet objet avant de le sauvegarder.
Dans ton exemple, tu peux l'utiliser comme cela à la place de passer par form.instance.
if request.method == "POST":
form = MessageForm(request.POST)
if form.is_valid():
ticket = Ticket.objects.create(user=user)
message = form.save(commit=False)
message.user = user
message.ticket = ticket
message.save()
J'ai plus l'habitude de voir du code avec commit=False qu'en utilisant form.instance cependant.
Je te dirais que ça dépend surtout de l'endroit où tu travailles à moins que tu sois tout seul sur un projet. Si tu es tout seul : tu peux utiliser ce que tu préfères, ça ne change pas grand-chose. Si tu travailles en équipe : suit les conventions définies par l'équipe (et s'il n'y a pas de convention, parles-en, c'est important d'en avoir en équipe 😄).
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte