【发布时间】:2020-02-20 07:02:27
【问题描述】:
我在 Django 中的一个视图对 6-7 个表执行保存操作。我希望这些事务是原子的,例如,如果第 5 或第 6 个事务失败,我想回滚所有以前的保存。 该视图包含一个 try-except 块来处理引发的异常。
看起来像这样:
@transaction.atomic
def my_view(request):
sid = transaction.savepoint()
try:
Table1.save()
Table2.save()
Table3.save()
Table4.save()
Table5.save()
Table6.save()
Table7.save() # This might fail. In case of failure I want to rollback saves from Table1 to Table6
transaction.savepoint_commit(sid)
except Exception as e:
print(str(e))
transaction.savepoint_rollback(sid)
return JsonResponse({"Status": 0, "Data": str(e)})
我已经尝试了上面的方法,Table7.save() 失败了,Table1 到 Table6 的回滚没有发生。
在所有情况下,我都想将 JSON 响应返回为 {"Status": 0, Data: "Error That occurred"}。
我不想像 This link 中所做的那样在 except 块中重新引发异常
如果失败,我应该怎么做才能返回正确的 JSONResponse 并回滚所有内容?
【问题讨论】:
-
Table2.save()看起来不对,这是确切的代码还是只是为了总结问题? -
总结版本。您可以从 models.py 中导入任何模型(表作为类)并为该模型(表)保存记录。
标签: python django database django-models atomic