首页 > 解决方案 > 在棉花糖中使用 `fields.Nested` 只嵌套部分模式

问题描述

所以当我尝试fields.Nested在棉花糖中使用时,我有一个问题,我想用它only来仅将部分模式提取到字段中,但它不起作用,也没有给我一个错误(这应该意味着它只承认?),所以我不知道为什么。

棉花糖版本:3.0.0b11

class ChildSchema(Schema):
    attrA = fields.String(example="a"),
    
    attrB = fields.Integer(example=1),

class ParentSchema(Schema):
    attrC = fields.Nested(ChildSchema, only=["attrA"])

我期望的是:

"attrC":{
   "attrA": "a"
}

但相反,我看到:

"attrC":{
   "attrA": "a",
   "attrB": 1,
}

参考:https ://marshmallow.readthedocs.io/en/3.0/nesting.html

标签: pythonserializationschemafieldmarshalling

解决方案


我不清楚example您的架构中在做什么。它不是Schema对象的参数。此外,尚不清楚您如何调用架构并尝试显示结果。但是,以下会产生所需的结果:

from marshmallow import Schema, fields, pprint

class ChildSchema(Schema):
    attrA = fields.Str(example="a")
    attrB = fields.Integer(example=1)

class ParentSchema(Schema):
    attrC = fields.Nested(ChildSchema, only=['attrA'])

schema = ParentSchema()
result = schema.dump({'attrC': {'attrA': 'five', 'attrB': 5}})

pprint(result)
#{'attrC': {'attrA': 'five'}}

推荐阅读