Как ограничить количество получаемых детей в django-treenode
У меня есть модель комментариев, где комментарий может быть корневым элементом или находиться под другим комментарием. Я использую REST API для получения полного дерева. Можно ли ограничить его глубину, чтобы, например, оно останавливалось после 3 узлов от каждого корневого комментария. Я хочу добавить функцию "больше" вместо того, чтобы показывать все дерево сразу.
` class CommentSerializer(serializers.ModelSerializer): leaf_nodes = serializers.SerializerMethodField()
class Meta:
model = Comment
fields = [
'id',
'body',
"leaf_nodes"
]
def get_leaf_nodes(self, obj):
return CommentSerializer(obj.get_children(), many=True).data
`
Я пытался просмотреть документацию на GitHub, но не нашел решения.
Я думаю, что ваша проблема находится на уровне DRF. Вы должны попробовать установить depth
параметр для вашего сериализатора. Из документа:
Параметр depth должен быть установлен в целочисленное значение, которое указывает на глубину отношений, которые должны быть пройдены перед возвратом к плоскому представлению.
https://www.django-rest-framework.org/api-guide/serializers/#specifying-nested-serialization
В конце концов я обнаружил, что могу использовать obj.tn_level
для проверки уровня глубины элемента.
Я использовал два сериализатора.
Первый - для первого раунда, где я ограничиваю уровень tn_level на основе const в настройках.
Второй сериализатор использует параметр, который я передаю через контекст из представления в сериализатор, содержащий уровень последнего листа на экране, и через другой const из настроек я получаю больше узлов
Таким образом, я показываю часть узлов и, нажимая "more", загружаю несколько узлов каждый раз.