django-restful:viewset detail_route自我理解

一个活动报名 报名后 做一个 点赞
我们不需要单独做一个 viewset
只需要在报名 viewset上

class SignViewSet(viewsets.GenericViewSet, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.CreateModelMixin):
    queryset = Sign.objects.all().order_by('vote_down_numbers').order_by('-vote_up_numbers')
    pagination_class = SignPagination

    def get_serializer_class(self):
        if self.action == 'create':
            return SignpostSerializer
        return SignSerializer

    def create(self, request, *args, **kwargs):
          ....

    @detail_route(methods=['POST'])
    def voteup(self, request, pk=None):
        """
        点赞
        """
        sign = self.get_object()
        if sign:
            if self.request.user in sign.vote_ups.all():
                sign.vote_ups.remove(self.request.user)
                sign.vote_up_numbers -= 1
                sign.save()
                return Response({'success': True, 'msg': f'取消赞', 'id': sign.activity_id})
            else:
                sign.vote_ups.add(self.request.user)
                sign.vote_up_numbers += 1
                sign.save()
                return Response({'success': True, 'msg': f'点赞成功', 'id': sign.activity_id})
        else:
            return Response({'success': False, 'msg': f'不存在这个用户'})

我们只需要 当用户点赞
请求这个url http://127.0.0.1:8000/signs/1/voteup
1 就是这个报名信息 的 id
voteup 就是我们定义的函数的 名字 就可以点赞

主要的就是self.get_object() 调用 这个报名信息的 实例 进行点赞

最新版本 做了修改了 但这不影响在以前版本使用

你可能感兴趣的:(django-restful:viewset detail_route自我理解)