Django rest framework. Отображение вложенности комментариев до 2-го уровня
Cтолкнулся с задачей, где вложенность комментариев отображается до 2-го уровня. На бэке комментарии хранятся без ограничения вложенности (т.е. у родителя могут быть внуки, правнуки и т.д.). Однако на фронте надо отображать комментарии до 2-го уровня:
Подскажите пожалуйста как это реализовать. Следует ли возвращать данные с бэка определенным образом или же делать это на фронте? Моделька Комментария:
class Comment(MPTTModel, TimestampMixin):
author = models.ForeignKey(Student, on_delete=models.CASCADE, related_name="comments")
text = models.CharField(max_length=300)
lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE, related_name='comments')
parent = TreeForeignKey('self', on_delete=models.CASCADE, blank=True, null=True, related_name="children")
question = models.ForeignKey('test_.Question', on_delete=models.CASCADE, blank=True, null=True, related_name="comments")
Json данные:
{
"result": {
"count": 15,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"author": {
"id": 1,
"first_name": "Bernar",
"avatar_thumbnail": null
},
"text": "comment 1",
"parent": null,
"lesson": 1,
"children": [
{
"id": 2,
"author": {
"id": 2,
"first_name": "Bertran",
"avatar_thumbnail": null
},
"text": "comment 2",
"parent": 1,
"lesson": 1,
"children": [],
"question": null,
"upvotes": 0,
"is_upvoted": false,
"created_at": "2020-08-06T11:45:56.195252Z"
}],
"question": {
"id": 1,
"text": "Какие из следующих выражении, тригонометрические?",
"description": null,
"order": 1,
"type": "RADIO",
"task": 1,
"choices": []
},
]
},
"code": 0
}
Сериализатор:
class RecursiveSerializer(serializers.Serializer):
"""
Serializer for children comments
"""
def to_representation(self, value):
serializer = self.parent.parent.__class__(value, context=self.context)
return serializer.data
class CommentSerializer(serializers.ModelSerializer):
"""
Serializer for comment
"""
children = RecursiveSerializer(many=True, read_only=True)
class Meta:
model = Comment
fields = ('id', 'author', 'text', 'parent', 'lesson', 'children', 'question', 'created_at')
read_only_fields = ('author', 'lesson',)
def to_representation(self, instance):
representation = super(CommentSerializer, self).to_representation(instance)
representation['author'] = ShortStudentSerializer(instance.author).data
representation['question'] = QuestionSerializer(instance.question).data
return representation
