如何在DjangoRestFramework中只深入一个字段?

2024-10-02 12:34:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个IPv4ListSerializer,它有一个depth = 1

class IPv4ListSerializer(ModelSerializer):
    """
    ipv4
    """
    ip_status = serializers.CharField(read_only=True)
    class Meta:
        model = IPv4Manage
        fields = "__all__"
        depth = 1

但结果变成了每个字段depth 1

^{pr2}$

我只能深入一个领域吗?例如,如果depthipv4network,我的要求是:

[
    {
        "id": 281,
        "ip_status": "Vlaned",
        "ip": "43.243.33.1",
        "netmask": "255.255.255.248",
        "prefix": 29,
        "is_gateway": false,
        "is_network_ip": false,
        "is_broadcast_ip": false,
        "desc": null,
        "ctime": "2018-04-26T21:17:33.623092+08:00",
        "uptime": "2018-06-02T12:48:41.882016+08:00",
        "ipv4network": {
            "id": 21,
            "network_ip": "43.243.33.0",
            "prefix": 24,
            "ctime": "2018-04-26T21:17:33.533667+08:00",
            "uptime": "2018-04-26T21:17:33.533814+08:00",
            "area_partition": 7
        },
        "vlaned_ipv4network": 1,
        "physical_server": 23,
    },
    ....
]

Tags: ipidfalseprefixisstatusnetworkclass
1条回答
网友
1楼 · 发布于 2024-10-02 12:34:18

depth适用于特定模型下的所有FK关系。因此,如果您需要删除某些特定字段的深度特性,请为每个fk字段使用不同的序列化程序(类似于nested serializer)。

示例

class IPv4ListSerializer(ModelSerializer):
    ip_status = serializers.CharField(read_only=True)
    ipv4network = IPV4NetworkSerializer()

    class Meta:
        model = IPv4Manage
        fields = "__all__"
        depth = 1  # remove this "depth"

相关问题 更多 >

    热门问题