【问题标题】:serialize children in marshmallow-sqlalchemy在棉花糖-sqlalchemy 中序列化孩子
【发布时间】:2019-08-07 18:13:25
【问题描述】:

Marshmallow 通常会序列化嵌套子项(假设定义了嵌套模式)。例如:

{
    'id': 2,
    'messages' : [
        {
            'id': 1,
            'message': 'foo'
        },
        {
            'id': 2,
            'message': 'bar'
        }
      ]
}

但是,marshmallow-sqlalchemy 使子项仅由其主键表示。例如:

{
    'id': 2,
    'messages' : [
        1,
        2
    ]
}

如何让 marshmallow-sqlalchemy 序列化子对象。最好,我应该能够指定深度。例如:序列化到 4 层深,然后使用 uid 行为。

理想情况下,这应该可以通过schema.load() 进行配置,因为它应该是基于序列化开始位置的动态。换句话说,将它与模式本身耦合是没有意义的。但是,如果这是唯一的方法,我也很想听到这样的解决方案。

【问题讨论】:

  • 您能否提供用于第二个示例的代码?你只用class Meta吗?

标签: python sqlalchemy marshmallow


【解决方案1】:

您可以使用嵌套字段来执行此操作。

假设您的架构如下所示:

class MessageSchema(Schema):
    msg_id = fields.Integer()
    message = fields.String()
    something = fields.String()

class ListSchema(Schema):
    list_id = fields.Integer()
    messages = fields.Nested(MessageSchema, only=['msg_id', 'message'])

要仅包含某些字段,请在调用 Nested 时使用 only 参数(有关用法,请参见上面的示例,其中仅 msg_idmessage 字段包含在序列化输出中)。

Marshmallow docs有更详细+完整的例子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2016-01-14
    • 1970-01-01
    • 2019-03-04
    • 2020-01-20
    相关资源
    最近更新 更多