django - 在表单内应用事务原子是否正确?

标签 django forms transactions save atomic

我有一个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 transactions docs

关于django - 在表单内应用事务原子是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842235/

相关文章:

javascript - 将 onclick 添加到来自 javascript 的标签

MySQL更新不更新所有记录

css - Django + Mac osx 如何少用css?

python - 如何在 django 中扩展用户配置文件?

python - 如何同步 Django 的 'Client' 和 Selenium 的 webdriver 之间使用的 html/session

Django:失去理智,用 Django auth 拔掉我的头发

android - iOS 和 Android 应用动态 UI 所需的技术推荐

javascript - 如何将集合插入到 meteor 表单中

java - Spring @Transaction

java - 阻塞 DBCP 连接池(打开和关闭连接)。 OpenEJB 中的数据库连接池是可插拔的吗?