Объект Django 'model' не является итерируемым при ответе

у меня есть 2 модели. И две модели связаны с ManyToManyField.

models.py

class PostModel(models.Model):
    id = models.AutoField(primary_key=True, null=False)
    title = models.TextField()
    comments = models.ManyToManyField('CommentModel')
class CommentModel(models.Model):
    id = models.AutoField(primary_key=True, null=False)
    post_id = models.ForeignKey(Post, on_delete=models.CASCADE)
    body = models.TextField()

и serializers.py

class CommentModel_serializer(serializers.ModelSerializer):
    class Meta:
        model = MainCommentModel
        fields = '__all__'

class PostModel_serializer(serializers.ModelSerializer):
    comment = MainCommentModel_serializer(many=True, allow_null=True, read_only=True)
    class Meta:
        model = MainModel
        fields = '__all__'

и views.py

@api_view(['GET'])
def getPost(request, pk):
    post = PostModel.objects.filter(id=pk).first()
    comment_list = CommentModel.objects.filter(post_id=post.id)
    for i in comments_list:
        post.comments.add(i)
    serializer = PostModel_serializer(post, many=True)
    return Response(serializer.data)

При выполнении запроса возникает ошибка.

'PostModel' object is not iterable

и Трекбэк указывает сюда.

return Response(serializer.data)

Я пытался изменить много кода, но не могу найти решения. Пожалуйста, подскажите, где и как все пошло не так

Я думаю, что вы сделали неправильно при создании ManyToManyField().

Вместо этого:

comments = models.ManyToManyField('CommentModel') #Here you made mistake. you should not add single quote to CommentModel. I think that's why you got that error

Попробуйте это:

comments = models.ManyToManyField(CommentModel)

Ссылаясь на этот thread, вы должны удалить many=True в PostModel_serializer.

Также это должно быть comment_list, а не comments_list.

@api_view(['GET'])
def getPost(request, pk):
    post = PostModel.objects.filter(id=pk).first()
    comment_list = CommentModel.objects.filter(post_id=post.id)
    for i in comment_list:
        post.comments.add(i)
    serializer = PostModel_serializer(post)
    return Response(serializer.data)
Вернуться на верх