Django 为基于 class 的重定向视图设置事务

Django setting a transaction for class-based redirect view

我有以下基于 class 的视图,具有简单的点赞切换机制:

class PostLikeToggle(RedirectView):

def get_redirect_url(self, *args, **kwargs):
    post_id = kwargs.get('pk')
    post = get_object_or_404(Post, id=post_id)
    user = self.request.user
    if post.likes.filter(id=user.id).exists():
        post.likes.remove(user)
    else:
        post.likes.add(user)
    url_redirect = post.get_absolute_url(post_id)
    return url_redirect

我想将此方法作为原子事务处理,但不确定这样做的正确方法。 我在正确的轨道上吗?

class PostLikeToggle(RedirectView):
    @transaction.atomic
    def get_redirect_url(self, *args, **kwargs):

有两种方法,第一种是你说的:

class PostLikeToggle(RedirectView):
    @transaction.atomic
    def get_redirect_url(self, *args, **kwargs):

第二个选项:

def get_redirect_url(self, *args, **kwargs)
    try: 
        with transaction.atomic(): 
            pass  # CRUD operations 
    except IntegrityError: 
        handle_exception()  # this will run after rollback