rest framework中的模型字段自关联

假设有分类模型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": []
                }
            ]
        }
    ]
}

猜你喜欢

转载自blog.csdn.net/JosephThatwho/article/details/109401886