一个活动报名 报名后 做一个 点赞
我们不需要单独做一个 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() 调用 这个报名信息的 实例 进行点赞
最新版本 做了修改了 但这不影响在以前版本使用