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)