Сериализация django-mptt также возвращает дочерние узлы вне родительского узла. - PullRequest
0 голосов
/ 29 ноября 2018

Я использую django-mptt с django-rest-framework и для рекурсивной сериализации я использую djangorestframework-recursive package, но он также возвращает дочерний узел вне родительского узла.Я попытался to_representation () также, что приводит к тому же результату.

from rest_framework import serializers
from rest_framework_recursive.fields import RecursiveField
from .models import Category

class CategorySerializer(serializers.ModelSerializer):
    children = RecursiveField(many=True)

    class Meta:
        model = Category  
      fields = ('id','name','parent', 'children')

views.py

from rest_framework import generics
from .serializers import CategorySerializer
from .models import Category

class CategoryListAPI(generics.ListCreateAPIView):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer

Вывод

[   {
        "id": 1,
        "name": "Rock",
        "parent": null,
        "children": [
            {
                "id": 4,
                "name": "Corase Rock",
                "parent": 1,
                "children": []
            },
            {
                "id": 2,
                "name": "Hard Rock",
                "parent": 1,
                "children": []
            },
            {
                "id": 3,
                "name": "Soft Rock",
                "parent": 1,
                "children": []
            }
        ]
    },
    {
        "id": 4,
        "name": "Corase Rock",
        "parent": 1,
        "children": []
    },
    {
        "id": 2,
        "name": "Hard Rock",
        "parent": 1,
        "children": []
    },
    {
        "id": 3,
        "name": "Soft Rock",
        "parent": 1,
        "children": []
    }
]

1 Ответ

0 голосов
/ 01 декабря 2018

Я решил эту проблему, если кто-нибудь проходит через это, я отвечу здесь.Произошла ошибка в файле наборов запросов views.py:

queryset = Category.objects.root_nodes()
...