我使用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/
我很高兴你喜欢
django-vote
。我合并了一个pull请求,该请求添加了一个新的api,以获得指定用户对所有实例的投票。你现在可以在pypi上下载最新版本了。你知道吗相关问题 更多 >
编程相关推荐