如何使用 Django Rest Framework 有效地序列化 django-mptt?

How to serialize the django-mptt efficiently with Django Rest Framework?

serializers.py

class RecursiveField(serializers.Serializer):
    def to_representation(self, value):
        serializer = self.parent.parent.__class__(value, context=self.context)
        return serializer.data

class CategorySerializer(serializers.ModelSerializer):
    children = RecursiveField(many=True)
    class Meta:
        model = Category
        fields=('id', 'title', 'description', 'children',)

它returns响应数据如:

    {
      "id": 1,
      "title": "Bike",
      "description": "",
      "children": []
    },
    {
      "id": 2,
      "title": "Car",
      "description": "",
      "children": [
        {
          "id": 3,
          "title": "Honda",
          "description": "",
          "children": []
        }
      ]
    },
    {
      "id": 3,
      "title": "Honda",
      "description": "",
      "children": []
    }

如上所示,ID:3的分类重复了。如果一个类别是某个类别的子类别,那么我不希望它再次单独显示。 我想要这样的响应数据:

    {
      "id": 1,
      "title": "Bike",
      "description": "",
      "children": []
    },
    {
      "id": 2,
      "title": "Car",
      "description": "",
      "children": [
        {
          "id": 3,
          "title": "Honda",
          "description": "",
          "children": []
        }
      ]
    }

有人可以帮我解决吗?

你可以只 return 根,所以只有根 return 而不是 parents 的 children,我就是这样做的。

class CategoryManager(TreeManager):
    def viewable(self):
        queryset = self.get_queryset().filter(level=0)
        return queryset

Category 个模型中。

objects = CategoryManager()

然后在views中我这样使用它:

queryset = Category.objects.viewable()