En django, je suis en train de faire quelque chose comme ceci:Pourquoi dois-je enregistrer ce modèle avant de l'ajouter à un autre?
# if form is valid ...
article = form.save(commit=False)
article.author = req.user
product_name = form.cleaned_data['product_name']
try:
article.product = Component.objects.get(name=product_name)
except:
article.product = Component(name=product_name)
article.save()
# do some more form processing ...
Mais il me dit:
valeur NULL dans la colonne "product_id" viole contrainte non nulle
Mais je ne comprends pas pourquoi c'est un problème. Lorsque article.save()
est appelé, il devrait pouvoir créer le produit puis (et générer un identifiant).
Je peux contourner ce problème en utilisant ce code dans le bloc except
:
product = Component(name=product_name)
product.save()
article.product = product
Mais la raison pour laquelle cela me préoccupe est parce que si article.save()
échoue, il aura déjà créé un nouveau composant/produit. Je veux qu'ils réussissent ou échouent ensemble.
Existe-t-il un bon moyen de contourner ce problème?
Remarque: article.product = Component.objects.create (nom = nom_du_produit) est un peu plus ordonné – michael
@michael: Oh!Je ne savais pas que je pouvais faire ça. C'est au moins un peu mieux. – mpen