假设有分类模型Types, 定义如下。
models.py:
...
class Types(models.Model):
id = models.BigAutoField(primary_key=True)
name = models.CharField(max_length=255, verbose_name='分类名称')
parent_type = models.ForeignKey(
'self', on_delete=models.DO_NOTHING, blank=True, null=True, verbose_name='父分类', related_name='children')
class Meta:
managed = False
db_table = 'script_types'
verbose_name = '类型'
verbose_name_plural = verbose_name
...
如果想通过rest_framework序列化成数结构,可以在get_field方法中修改children的内容,定义方式如下。
serializers.py:
class TypeSerializer(ModelSerializer):
"""
分类序列器
"""
class Meta:
model = Types
fields = ('id', 'name', '、'children')
def get_fields(self):
fields = super(TypeSerializer, self).get_fields()
fields['children'] = TypeSerializer(many=True)
return fields
最终List接口的查询结果如下:
{
"count": 4,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"name": "类别1",
"children": []
},
{
"id": 3,
"name": "类别3",
"children": [
{
"id": 6,
"name": "类别6",
"children": []
}
]
},
{
"id": 7,
"name": "类别7",
"children": [
{
"id": 12,
"name": "类别12",
"children": []
}
]
},
{
"id": 13,
"name": "类别13",
"children": [
{
"id": 14,
"name": "类别14",
"children": []
}
]
}
]
}