返回当前用户投票表决的所有对象实例的反向关系的序列化列表

2024-09-30 08:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用django-vote拥有用户“喜爱”的内容和出口。我想要Django Rest框架中的端点视图,它将返回一个(ContentSerializer)列表,其中列出当前登录用户投票(喜爱的)的所有内容。你知道吗

但是,虽然django-vote提供了一种通过content.likes.users()检索对特定内容实例投票的用户列表的方法,但它没有提供检索用户投票的所有内容实例的方法。你知道吗

我的理想结果是,访问/content/favourited/将得到一个使用ContentSerializer的json,它列出content.likes.exists(user)True的所有内容。我如何有效地做到这一点?你知道吗

型号.py

from django.db import models
from vote.managers import VotableManager

class Content(models.Model):
    # ... fields here
    likes = VotableManager()

视图.py

class ContentViewSet(viewsets.ReadOnlyModelViewSet):
    """
    API endpoint that allows Content to be viewed
    """
    queryset = Content.objects.all()
    permission_classes = [AllowAny]
    filter_backends = (filters.DjangoFilterBackend,)
    filter_class = ContentFilter

    @list_route(permission_classes=[IsAuthenticated])
    def favourited(self, request):    
        """
        Returns a list of favourited content for the current logged-in user.
        """
        if request.user.is_authenticated():
            **DO SOMETHING**
            return **SOMETHING**

    @detail_route(permission_classes=[IsAuthenticated])
    def like(self, request, pk=None):
        """
        Toggles favourited "like" on content for the current logged-in user.
        """
        if request.user.is_authenticated():
            liked = self.get_object().likes.exists(request.user)
            if liked is False:
                self.get_object().likes.up(request.user)
                return Response({'status': 'liked'})
            elif liked is True:
                self.get_object().likes.down(request.user)
                return Response({'status': 'unliked'})
        else:
            return Response({'status': 'unauthenticated'})

    def get_serializer_class(self):
        # this will throw an error if using django rest swagger
        if self.action == 'list':
            return ContentSerializer
        if self.action == 'retrieve':
            return ContentDetailSerializer
        return ContentSerializer

还有一个次要的问题,我想知道理想情况下这个“喜爱的内容”端点应该在哪里-在/content下,通过request标识登录的用户,或者在/users下使用pk?你知道吗

http://example.com/api-v1/users/1/favourited-content/

或者

http://example.com/api-v1/content/favourited/ 

Tags: django用户self内容returnifisrequest
1条回答
网友
1楼 · 发布于 2024-09-30 08:18:16

我很高兴你喜欢django-vote。我合并了一个pull请求,该请求添加了一个新的api,以获得指定用户对所有实例的投票。你现在可以在pypi上下载最新版本了。你知道吗

相关问题 更多 >

    热门问题