在Marshmallow中嵌套通用字段

时间:2017-08-15 00:22:39

标签: python flask marshmallow

我正在尝试来自here的marshmallow ORM库。我有一个使用此表单的通用报告模式:

    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"
    }

marsmallow中执行通用嵌套模式的正确方法是什么?

0 个答案:

没有答案