Django Rest как показать список комментариев, которые принадлежат только связанному блогу и автору?

Предположим, что автор Jhone написал Blog, название которого "Этот блог написан автором Jhone", а автор Joe написал Blog "Этот блог написан автором Joe". Блог Jhone получил 20 комментариев, а блог Joe получил 10 комментариев. Когда Jhone войдет в свой аккаунт, он сможет увидеть только те комментарии, которые относятся к его записи в блоге, и то же самое будет для Joe. Здесь я попробовал этот запрос Comment.objects.all().filter(blog__author_id=request.user.id), но все равно теперь каждый может видеть комментарии друг друга из моего api url. вот мой код:

@api_view(['POST', 'GET'])
def comment_api(request): 
    if request.method == 'POST':
        serializer = CommentSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    if request.method == 'GET':    
        comment = Comment.objects.all().filter(blog__author_id=request.user.id)
        serializer = CommentSerializer(comment, many=True)
        return Response(serializer.data)

serializer.py

class CommentSerializer(serializers.ModelSerializer):
      class Meta:
          model = Comment
          fields = '__all__' 

models.py

class Blog(models.Model):
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
    blog_title = models.CharField(max_length=200, unique=True)

class Comment(models.Model):
      name = models.CharField(max_length=100)
      email = models.EmailField(max_length=100)
      comment = models.TextField()
       blog = models.ForeignKey(Blog, on_delete=models.CASCADE)

Вы получаете .all() комментариев до фильтрации, попробуйте сделать это, сначала отфильтруйте, а затем получите все то, что только что было отфильтровано:

comment = Comment.objects.filter(blog__author=request.user.id).all()

Мне не хватало идентификатора автора. Вместо этого Comment.objects.all().filter(blog__author=request.user.id) будет Comment.objects.all().filter(blog__author_id=request.user.id)

Вернуться на верх