Python 在棉花糖中筑巢
我正在试着从我的图书馆买棉花糖。我有一个通用的报告模式和此表单:Python 在棉花糖中筑巢,python,flask,marshmallow,Python,Flask,Marshmallow,我正在试着从我的图书馆买棉花糖。我有一个通用的报告模式和此表单: class ReportingQueryResultSchema(ma.Schema): start_date = fields.Str(required=True) end_date = fields.Str(required=True) data = fields.Nested( ReportingDataSchema,
class ReportingQueryResultSchema(ma.Schema):
start_date = fields.Str(required=True)
end_date = fields.Str(required=True)
data = fields.Nested(
ReportingDataSchema,
required=True,
many=True
)
ReportingDataSchema
是一个通用字段。它可以是不同类型的模式。我的第一本能是继承。所以我试着这样做:
class ReportingDataSchema(ma.Schema):
pass
class FooSchema(ReportingDataSchema):
value = fields.Str()
class BarSchema(ReportingDataSchema):
thing = fields.Str()
marshmallow
未能序列化嵌套字段,导致以下情况:
{
"data": [
{}
],
"end_date": "2017-06-05",
"start_date": "2017-06-01"
}
但是如果我声明ReportingQueryResultSchema
为:
class ReportingQueryResultSchema(ma.Schema):
start_date = fields.Str(required=True)
end_date = fields.Str(required=True)
data = fields.Nested(
FooSchema, # replaced here
required=True,
many=True
)
然后,它能够检测嵌套模式并正确填充结果
{
"data": [
{"key": "val"}
],
"end_date": "2017-06-05",
"start_date": "2017-06-01"
}
在
marshmallow
中执行泛型嵌套模式的正确方法是什么?我认为您必须查找polymorpich或polyfield,这里有一个示例