Django Rest Framework Вложенные комментарии

Я пытаюсь создать бэкенд для сайта блога. Я создал модель комментариев и связал ее с записью в блоге. Когда я вывожу список комментариев, я также могу перечислить ответы, которые были сделаны на комментарий. Но есть проблема в том, что даже если комментарий отображается как ответ, он также выглядит так, как будто это снова был основной комментарий. Как я могу решить эту проблему. Я буду благодарен, если кто-то сможет помочь. У меня могут быть ошибки в английском, надеюсь, я смог рассказать вам то, что хотел. Заранее спасибо.

Комментарий модели:

class Comments(models.Model):
      class Meta:
            verbose_name = 'Yorum'
            verbose_name_plural = 'Yorumlar'

      user = models.ForeignKey(User, verbose_name='Yorum sahibi', on_delete=models.CASCADE)
      post = models.ForeignKey(Post, verbose_name='Yorum yapılacak Post', on_delete=models.CASCADE,related_name='comments')
      parent_id = models.ForeignKey('self', verbose_name='Parent Yorum', related_name='subcomments',on_delete=models.CASCADE, null=True, blank=True)
      comment = models.TextField(verbose_name='Yorum')
      [enter image description here][1]created_at = models.DateTimeField(auto_now_add=True, blank=True)
      updated_at = models.DateTimeField(auto_now=True, blank=True)

    def __str__(self):
        return self.user.first_name + " " + self.user.last_name + " | " + self.post.title

Сериализатор комментариев:

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

    def get_fields(self):
         fields = super(CommentSerializer, self).get_fields()
         fields['subcomments'] = CommentSerializer(many=True, read_only=True)
         return fields

Post Serializer

class PostSerializer(serializers.ModelSerializer):
     tag = serializers.StringRelatedField(many=True, read_only=True)
     comments = CommentSerializer(many=True, read_only=True)
     author = AuthorSerializer(read_only=True)
     category = CategorySerializer2(read_only=True)

     class Meta:
        model = Post
        fields = '__all__'

Первый вариант

Для решения проблемы можно использовать вложенный сериализатор

class CommentSerializer(serializers.ModelSerializer):
    parent_id = serializers.PrimaryKeyRelatedField()

    class Meta:
        model = Comment
        fields = '__all__'

        def get_related_field(self, model_field):
            return CommentSerializer()

Второй вариант

Вы можете использовать библиотеку под названием djangorestframework-recursive для вашего случая использования

Сначала установите библиотеку

pip install djangorestframework-recursive

В вашем файле сериализатора

from rest_framework import serializers
from rest_framework_recursive.fields import RecursiveField

class CommentSerializer(serializers.ModelSerializer):
    parent_id = serializers.ListField(child=RecursiveField())
    class Meta:
         model = Comments
         fields = '__all__'
Вернуться на верх