Auto-associação de campos de modelo em estrutura de repouso

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": []
                }
            ]
        }
    ]
}

Acho que você gosta

Origin blog.csdn.net/JosephThatwho/article/details/109401886
Recomendado
Clasificación