如何列出所有在django rest框架中喜欢帖子的用户?

时间:2020-07-31 11:23:07

标签: django django-models django-rest-framework django-views

我是django rest框架的新手,我试图列出所有喜欢特定帖子的用户,但是在这里,我得到的只是一个空字典。我的观点或序列化器可能有误,有人可以签出代码并提出我应该进行的更改吗?

class LikeListApiView(APIView):
    serializer_class = PostLikeListSerializer
    permission_classes = (IsAuthenticated,)

    def get(self, *args, **kwargs):
        try:
            post = get_object_or_404(Post, slug=self.kwargs['slug'])
        except Post.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)
        likes_list = post.likes.all()
        serializer = PostLikeListSerializer(likes_list)
        return Response(serializer.data, status=status.HTTP_200_OK)

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ['username',]

class PostLikeListSerializer(serializers.ModelSerializer):
    likes = UserSerializer(many=True, read_only=True) #likes is in Post model with foreign key to user Model
    class Meta:
        model = Post
        fields = ['likes',]

请让我知道是否需要更多详细信息。

谢谢

1 个答案:

答案 0 :(得分:0)

您将PostLikeSerializer传递给一个Account对象,而不是Post对象

替换

try:
    post = get_object_or_404(Post, slug=self.kwargs['slug'])
except Post.DoesNotExist:
    return Response(status=status.HTTP_404_NOT_FOUND)
likes_list = post.likes.all()
serializer = PostLikeListSerializer(likes_list)
return Response(serializer.data, status=status.HTTP_200_OK)

作者

try:
    post = get_object_or_404(Post, slug=self.kwargs['slug'])
except Post.DoesNotExist:
    return Response(status=status.HTTP_404_NOT_FOUND)
serializer = PostLikeListSerializer(post) # <-- here you pass post object
return Response(serializer.data, status=status.HTTP_200_OK)

编辑:

,您可以删除get方法以检查post是否存在,ModelViewSet可以为您完成此操作 所以这是完全一样的:

class LikeListApiView(modelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostLikeListSerializer
    permission_classes = (IsAuthenticated,)