You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Marshmallow中包装模型实例的parent字段为嵌套ID结构?

在Marshmallow中包装父ID为嵌套结构的实现方式

你的当前代码是可以正常实现需求的,但还有更简洁的方案可选,下面给你两种更直观的实现方式:

方案一:使用MethodField

直接在UserSchema里通过MethodField自定义序列化逻辑,不用额外定义子Schema:

from marshmallow import Schema, fields

class UserSchema(Schema):
    name = fields.String()
    parent = fields.Method("serialize_parent")

    def serialize_parent(self, obj):
        # 可选:处理parent为None的情况
        return {"id": obj.parent} if obj.parent else None

方案二:自定义字段(适合多处复用场景)

如果这种“把字符串ID包装成{id: xxx}”的需求在多个地方用到,自定义一个专用字段会更方便:

from marshmallow import Schema, fields

class WrappedIdField(fields.Field):
    def _serialize(self, value, attr, obj, **kwargs):
        if value is None:
            return None
        return {"id": value}

class UserSchema(Schema):
    name = fields.String()
    parent = WrappedIdField()

关于你当前实现的说明

你现有的代码逻辑是可行的:IdSchema的pre_dump钩子会把传入的父ID字符串转换成{"id": data},然后Nested(IdSchema)字段再序列化这个字典,最终得到你想要的结构。只是相比上面两种方案,多了一层Schema定义,略显繁琐。

内容的提问来源于stack exchange,提问作者Baz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:35:56