如何用Marshmallow验证指定字段存在并忽略未知字段?
解决方案
直接在Schema类的Meta配置中添加unknown='EXCLUDE'参数,结合你已定义的product_type字段配置即可实现需求:
from marshmallow import Schema, fields class MySchema(Schema): # 确保字段必须存在,允许值为None product_type = fields.Str(required=True, allow_none=True) # 忽略所有未在Schema中定义的字段 class Meta: unknown = 'EXCLUDE'
关键配置说明
unknown='EXCLUDE':让Marshmallow验证时直接忽略所有未声明的字段,不会因为输入字典包含额外字段而触发验证错误。required=True:强制要求输入字典中必须存在product_type字段,缺失时直接验证失败。allow_none=True:允许product_type的取值为None,不会因为字段值是None而报错。
验证示例
- 验证通过的输入:
valid_input1 = {"product_type": None, "extra_field": "任意内容"} valid_input2 = {"product_type": "book", "another_field": 123} - 验证失败的输入(缺失product_type):
invalid_input = {"extra_field": "缺少product_type"}
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

