尝试使用棉花糖加载data_key数据时'Missing data'



我尝试使用棉花糖2.18.0 on python 3.7 用于验证数据。我等待JSON {'name': 'foo', 'emailAddress': 'x@x.org'}并加载架构:

class FooLoad(Schema):
    name = fields.Str()
    email = fields.Email(data_key='emailAddress', required=True)

i除了 data_key on load 会像 {'name': 'foo', 'email': 'x@x.org'}一样返回我,但是我在错误字段中遇到了错误:

schema_load = FooLoad()
after_load = schema_load.load({'name': 'foo', 'emailAddress': 'x@x.org'})
after_load.errors # return {'email': ['Missing data for required field.']}

但是,按照棉花糖文档的示例,具有 devDepentencies 或github问题 after_load 必须包含诸如 {'name': 'foo', 'email': 'x@x.org'}的数据。

我想对传入的日期进行挑选,名称与架构属性名称不同(指定 date_key ),但是尝试时会出现错误。我如何在此属性的data_key字段中与架构属性不同的输入数据?

在data_key字段中声明

data_key在棉花糖3中引入。

请参阅ChangElog条目:

向后兼容:将data_key参数添加到字段中,以指定输入数据和输出数据中的密钥。此参数同时替换load_fromdump_to(#717)。

和相关的拉值。

使用棉花糖2时,必须使用load_from/dump_to

class FooLoad(Schema):
    name = fields.Str()
    email = fields.Email(load_from='emailAddress', dump_to='emailAddress', required=True)

您正在使用棉花糖2,但阅读棉花糖3。

请注意,Marshmallow 3包含一堆改进并且处于RC状态,因此,如果您要启动一个项目,则可以选择Marshmallow 3并在将来节省一些过渡工作。

我正在经历相同的现象,试图解析API响应。事实证明,尽管我需要比我更早地钻1级。

响应是:

{
  "meta": {
    "status": 200,
    "message": null
  },
  "response": {
    "ownerId": "…",
    "otherData": […]
  }
}

然后我打电话:

MySchema().load(response.json())
…
class MySchema(Schema):
    owner_id = fields.String(data_key='ownerId')
    …
    Meta:
        unknown = INCLUDE
    @post_load
    def load_my_object(self, data, **kwargs):
        inner = data.get('response', data)
        return MyObject(**inner)

但实际上应该是:

inner = data.get('response', data)
return MySchema().load(inner)
…
class MySchema(Schema):
    owner_id = fields.String(data_key='ownerId')
    …
    Meta:
        unknown = INCLUDE
    @post_load
    def load_my_object(self, data, **kwargs):
        return MyObject(**data)

相关内容

  • 没有找到相关文章

最新更新