我尝试使用棉花糖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
在棉花糖3中引入。
请参阅ChangElog条目:
向后兼容:将
data_key
参数添加到字段中,以指定输入数据和输出数据中的密钥。此参数同时替换load_from
和dump_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)