@transection.commit_on_success
def recordIt(...)
try:
....
recordable = firstDataInsertionFunction(...)
if recordable:
myRec = SecondDataInsertion(.....)
except:
....
对于 commit_on_success ,如果我的第二次数据插入失败,django必须自动回滚,所以我的第一次数据插入也将被回滚...
但这不起作用,并且第一次插入的数据被保存到db,而我无法在我的数据库中看到第二次插入的结果...是try / except会导致commit_on_success失败吗?因为文档说:
如果函数成功返回,那么Django将在该点提交函数内完成的所有工作。但是,如果函数引发异常,Django将回滚事务。
尝试处理所有异常。问题是我的工作 commit_on_success ?
答案 0 :(得分:4)
首先,不要做except:
。它很糟糕,捕获太多,并隐藏了错误。
是的,如果您处理异常,那么commit_on_success
不可能知道存在错误。如果你需要在异常上运行逻辑,那么之后重新加载它(只有raise
,没有参数)。或者自己回滚。