我有用户喜欢'内容和插座,使用django-vote。我希望Django Rest Framework中的端点视图能够返回当前登录用户投票(赞成)的所有内容的(ContentSerializer)列表。
但是,虽然django-vote提供了一种方法来检索通过content.likes.users()
在特定内容实例上投票的用户列表,但它没有提供检索用户投票的所有内容实例的方法。
我理想的结果是访问/content/favourited/
将使用ContentSerializer提供json,其中列出了content.likes.exists(user)
为True
的所有内容。我该如何有效地做到这一点?
models.py
from django.db import models
from vote.managers import VotableManager
class Content(models.Model):
# ... fields here
likes = VotableManager()
views.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
同样在次要说明中,我想知道这个"喜欢的内容应该在哪里?#34;通过/content
识别登录用户,或request
使用/users
pk
之下
http://example.com/api-v1/users/1/favourited-content/
或
http://example.com/api-v1/content/favourited/
答案 0 :(得分:0)
我很高兴你喜欢django-vote
。我合并了一个pull请求,它添加了一个新api以获取指定用户投票的所有实例。您现在可以在pypi上下载最新版本。