问题描述
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',)
它返回如下响应数据:
{
"id": 1,"title": "Bike","description": "","children": []
},{
"id": 2,"title": "Car","children": [
{
"id": 3,"title": "Honda","children": []
}
]
},{
"id": 3,"children": []
}
如上图,ID为3的category已经重复了。如果一个类别是某个类别的子项,那么我不希望它再次单独显示。 我想要这样的响应数据:
{
"id": 1,"children": []
}
]
}
有人可以帮我解决吗?
解决方法
你可以只归还根,所以只归根而不是父母的孩子,我就是这样做的。
class CategoryManager(TreeManager):
def viewable(self):
queryset = self.get_queryset().filter(level=0)
return queryset
在 Category
模型中。
objects = CategoryManager()
然后在 views
中我是这样使用的:
queryset = Category.objects.viewable()