perform_create之后的Django回滚事务

时间:2019-01-27 10:24:00

标签: django postgresql transactions

我想在django中使用transaction.atomic时没有任何运气,我知道我做错了事,但是我不知道是什么。

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是否不应该进行回滚?

第二种方法将引发自定义异常 我读了文档,看来我做的一切都正确。

1 个答案:

答案 0 :(得分:0)

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