【发布时间】:2012-01-02 01:01:08
【问题描述】:
当我提交表单时,我必须将两个对象保存到数据库中;但是,如果在第一次和第二次保存之间出现故障,我仍然会在数据库中看到第一个对象。
因为我在主要设置中启用了 TransactionMiddleware,所以我希望(并且期待)请求失败以回滚我因该请求而做出的任何数据库更新。
我的代码如下:
def submit(request):
form1 = Form1(request.POST)
form2 = Form2(request.POST)
obj1 = form1.save()
# simulate an error
raise Exception('spam', 'eggs')
obj2 = form2.save(commit=False)
obj2.obj1 = obj1
form2.save()
当我随后查询数据库时,obj1 存在。由于失败,我如何让它回滚 obj1 事务?
(我也试过把装饰器放到@transaction.commit_on_success,但是obj1还是保存在数据库里)。
【问题讨论】:
标签: django transactions commit partial