我有一个ModelForm
,我想在其中重写 save() 方法来创建相关对象。我需要在 transaction.atomic()
这样应用是否正确:
class MyForm(ModelForm):
@transaction.atomic
def save(self, commit):
self.instance.save()
# and create related objects using self.instance..
因为我总是看到它应用于 View ,但我的 View 是基于类的,所以我无法应用这个装饰器。对我来说,将其应用到进行保存的实际方法中似乎也是合乎逻辑的。 其次,事务原子的“深度”是多少,如果我将其应用于 View ,我想它适用于从那里进行的任何调用?
最佳答案
根据我的评论,我添加了一个示例,说明如何在基于类的 View 中执行此操作。
你可以使用这样的装饰器:
class YourView(View):
@transaction.atomic
def post(self, request, *args, **kwargs):
...
或者更好的是你可以这样做:
class YourView(View):
def post(self, request, *args, **kwargs):
try:
with transaction.atomic():
your_model = form.save()
generate_relationships()
except IntegrityError:
handle_exception()
或者您可以同时使用两者。
关于django - 在表单内应用事务原子是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842235/