在 django 中,我正在尝试做这样的事情:
# 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 ...
但它告诉我:
“product_id”列中的空值违反非空约束
但我不明白为什么这是一个问题。当article.save()
被调用时,它应该能够创建产品(并生成一个 id)。
我可以通过在except
块中使用此代码来解决此问题:
product = Component(name=product_name)
product.save()
article.product = product
但这让我担心的原因是,如果article.save()
失败,它已经创建了一个新的组件/产品。我希望他们一起成功或失败。
有没有一个很好的方法来解决这个问题?