Объект 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)