棉花糖通常会序列化嵌套子级(假定已定义嵌套模式)。例如:
{
'id': 2,
'messages' : [
{
'id': 1,
'message': 'foo'
},
{
'id': 2,
'message': 'bar'
}
]
}
但是,棉花糖-sqlalchemy导致子代仅由其主键表示。例如:
{
'id': 2,
'messages' : [
1,
2
]
}
如何获取棉花糖-sqlalchemy来序列化子对象。最好,我应该能够指定深度。例如:序列化为4层深度,然后使用uid行为。
理想情况下,这应该可以通过schema.load()
进行配置,因为它应该根据序列化的开始位置是动态的。换句话说,将其耦合到架构本身没有任何意义。但是,如果那是唯一的方法,那么我也很好奇听到这样的解决方案。
答案 0 :(得分:0)
您可以使用嵌套字段来执行此操作。
假设您有一个如下所示的架构:
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'])
要仅包含某些字段,请在调用only
时使用Nested
参数(有关用法,请参见上面的示例,其中序列化中仅包含msg_id
和message
字段输出)。
Marshmallow docs有一个更详细的完整示例: