首页 > 解决方案 > perform_create 后 Django 回滚事务

问题描述

我正在尝试将 transaction.atomic 与 django 一起使用,但没有任何运气我知道我做错了什么,但我不知道是什么。

class SnapshotView(BaseViewSet):
    serializer_class = SnapshotSerializer

    @transaction.atomic
    def perform_create(self, serializer):
        # this will call serializer.save()
        snapshot = snapshot = super().perform_create(serializer)
        # this will run some code can raise an exception
        SnapshotServices.create_snapshot(snapshot=snapshot,
                                         data=serializer.initial_data)

创建新快照的第一个方法将通过第二个将引发但我仍然可以在数据库中看到我的快照实例,这是为什么呢?我在事务块中并且出现故障,django 不应该回滚吗?

第二种方法会抛出一个自定义异常,我阅读了文档,似乎我做的一切都是正确的。

标签: djangopostgresqltransactions

解决方案


我想通了。我的问题是django在原子中使用时使用默认数据库是无。因为我使用的是不同的数据库,所以我只是将 using 添加到我的装饰器 transaction.atomic(using=MYDB) 中,这解决了我的问题。


推荐阅读