Suponha que existam Tipos de modelo de classificação, definidos a seguir.
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
...
Se você quiser serializar em uma estrutura numérica por meio de rest_framework, você pode modificar o conteúdo dos filhos no método get_field.A definição é a seguinte.
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
O resultado final da consulta da interface List é o seguinte:
{
"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": []
}
]
}
]
}