我的对象看起来有点像:
source = {
id: 123,
objects: [
{
random_data: aaaa,
actual_data: {
useful: 111,
...
}
},
{
random_data: bbbb,
actual_data: {
useful: 222,
...
}
}
]
}
虽然我可以很容易地将其序列化,但将其转换为以下格式会更有用:
dest = {
id: 123,
objects: [
{
useful: 111,
...
},
{
useful: 222,
...
}
]
}
鉴于我已经有了一个最内层对象的模式(上面的源代码中为actual_data
- 它比我的示例显示要复杂得多),展平嵌套对象的最佳方法是什么,所以我只在没有额外深度的情况下从actual_data
获取对象?我原以为它会像
objects = Nested(UsefulSchema, many=True, load_from"<something>.useful_data")
但是如果没有预处理数据,我就无法找到解决方案。
注意我已经简化了我的例子以提供最简单的问题形式,在我的实际代码中,源数据是来自sqlalchemy的类似对象的大型列表。
答案 0 :(得分:1)
您可以通过使用Pluck
字段来允许父级从子级获取数据来实现此目的。
class ActualDataSchema(ModelSchema):
useful = fields.String()
also_useful = fields.String()
class ObjectSchema(ModelSchema):
useful = fields.Pluck(ActualDataSchema, 'useful')
also_useful = fields.Pluck(ActualDataSchema, 'also_useful')
class DestSchema(ModelSchema):
id = fields.Integer()
objects = fields.Nested(ObjectSchema, many=True)
您必须改为使用Method
或Function
字段。
class ObjectSchema(ModelSchema):
useful = fields.Function(lambda obj: obj.actual_data.useful)
also_useful = fields.Function(lambda obj: obj.actual_data.also_useful)
class DestSchema(ModelSchema):
id = fields.Integer()
objects = fields.Nested(ObjectSchema, many=True)
fields.Pluck()
fields.Function()
and fields.Method()