首页 > 解决方案 > DRF 操作中的原子事务?

问题描述

我试图Django atomic transactions在第一时间进入。我想知道是否有可能像这样使用它:

class TaskViewSet(MultiSerializerViewSet):
    @transaction.atomic
    @action(methods=['PATCH'], detail=True)
    def move_task(self, request, pk):
        # making queries, trying to update them, roll back if last one fails.    
        return Response("message: SUCCESS", status=_status.HTTP_200_OK)

我搜索了一下——有一些关于如何使用事务的信息,但如果可以将它们与 DRF 一起使用,我没有找到任何信息。

标签: pythondjangodjango-rest-framework

解决方案


class PayViewSet(ModelViewSet):

    @action(methods=['PATCH'], detail=True)
    @transaction.atomic
    def approval(self, request, *args, **kwargs):
        sid = transaction.savepoint()
        success = something 
        if success:
            transaction.savepoint_commit(sid)
            return success_response('yes')
        else:
            transaction.savepoint_rollback(sid)
            return error_response('no')

保存点是可选的,具体取决于您的情况


推荐阅读