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,这里有一个示例