我是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',]
请让我知道是否需要更多详细信息。
谢谢
答案 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,)