Вложенные комментарии в django-rest-framework
Пытаюсь сделать вложенные комментарии к постам, но при выводе постов выдает ошибку: "столбец news_comment.parent_id не существует". Сделать миграцию не помогает. Как решить эту проблему или, возможно, стоит сделать все иначе?
serializers.py
class CommentSerializer(serializers.ModelSerializer):
replys = serializers.SerializerMethodField()
def get_replys(self, obj):
queryset = Comment.objects.filter(parent_id=obj.id)
serializer = CommentSerializer(queryset, many=True)
return serializer.data
class Meta:
model = Comment
fields = '__all__'
class PostListSerializer(serializers.ModelSerializer):
comments = serializers.SerializerMethodField()
def get_comments(self, obj):
queryset = Comment.objects.filter(post_id=obj.id, parent_id=None)
serializer = CommentSerializer(queryset, many=True)
return serializer.data
class Meta:
model = Post
fields = '__all__'
models.py
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
parent = models.ForeignKey(
'self',
default=None,
blank=True,
null=True,
on_delete=models.CASCADE,
verbose_name='parent',
related_name='replys'
)
text = models.TextField(max_length=1500)
date = models.DateTimeField(auto_now=True)
username = models.CharField(max_length=50)
user = models.ForeignKey(User, on_delete=models.CASCADE)
Ответы (1 шт):
Скорее всего ошибка в строке:
queryset = Comment.objects.filter(post_id=obj.id, parent_id=None).
Если разбирать ошибку "столбец news_comment.parent_id не существует". То он ругается на parent_id в фильтрации. Я понимаю, что вы пытаетесь обратиться к неявному столбуц parent_id, но я не уверен что он создается учитывая то, что в ForeignKey вы связываете его с собой ("self"). Попробуйте изменить фильтры. Для удобства работы с Django ORM можно использовать Django Shell:
python3 manage.py shell
Потом импортируете нужные Models (from <app_name>.models import Comments) и смотрите их атрибуты и поля.