尝试使用 marshmallow 通过 data_key 加载数据时出现“丢失数据”

Ubf*_*_10 5 python python-3.x marshmallow

我尝试在python 3.7上使用marshmallow 2.18.0来验证数据。我等待 json并使用架构加载它:{'name': 'foo', 'emailAddress': 'x@x.org'}

class FooLoad(Schema):
    name = fields.Str()
    email = fields.Email(data_key='emailAddress', required=True)
Run Code Online (Sandbox Code Playgroud)

我除了加载时的data_key会返回一些类似的信息,但我在错误字段中收到错误:{'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.']}
Run Code Online (Sandbox Code Playgroud)

但根据Marshmallow 文档devDependency或 github问题的示例 after_load必须包含类似{'name': 'foo', 'email': 'x@x.org'}.

我想反序列化传入的日期,其名称与架构属性名称不同(指定 date_key 所需的内容,但尝试时出现错误。我如何使用与架构属性不同的名称反序列化输入数据并在此属性的 data_key 字段中声明?

Jér*_*ôme 0

data_key在棉花糖3中引入。

请参阅变更日志条目

向后不兼容data_key向字段添加参数以指定输入和输出数据字典中的键。该参数取代了load_fromand dump_to(#717)。

以及相关的拉取请求

使用 marshmallow 2 时,必须使用load_from/ dump_to

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

您正在使用 Marshmallow 2,但正在阅读 Marshmallow 3 的文档。

请注意,marshmallow 3 包含大量改进,并且处于 RC 状态,因此如果您正在启动一个项目,您可以选择 marshmallow 3 并为自己节省一些将来的过渡工作。