我试图创建一个保存对象的视图,但如果出现异常,我想撤消保存的视图。我就是这么想的:
class MyView(View):
@transation.atomic
def post(self, request, *args, **kwargs):
try:
some_object = SomeModel(...)
some_object.save()
if something:
raise exception.NotAcceptable()
# When the workflow comes into this condition, I think the previous save should be undome
# Whant am I missing?
except exception.NotAcceptable, e:
# do something
我做错什么了?即使引发异常,some_object
仍在数据库中。
Atomicity Documentation
总而言之,
@transaction.atomic
将在数据库上执行一个事务,如果您的视图生成一个没有错误的响应。因为您自己正在捕捉异常,所以在Django看来,您的视图执行得很好。如果捕捉到异常,则需要自己处理:Controlling Transactions
如果在失败时需要生成正确的json响应:
对我来说这在Django 2.2.5工作
首先在你的设置中.py
在你的函数中(views.py)
但是,如果在用transaction.atomic修饰的函数中发生异常,则无需执行任何操作,它将rollback automatically to the savepoint created by the decorator before running the your function,如documented:
如果异常在except块中捕获,则应重新引发该异常,以便atomic捕获该异常并执行回滚,即:
另外,如果需要更多控制,可以手动回滚到previously set savepoint,即:
相关问题 更多 >
编程相关推荐