Marshmallow嵌套Schema报错:Invalid input type问题求助
问题排查与解决
核心错误原因
你在实例化Schema时设置了many=True:
chalan_details_Schema = ChalanDetailsSchema(many=True)
这个参数表示当前Schema需要接收数组(列表)格式的输入,但你从Postman传入的是单个JSON对象,而非数组,类型不匹配导致了"Invalid input type"错误。
两种解决方式
方式一:修改Schema实例化(适配单个对象输入)
如果业务场景是接收单个ChalanDetails对象,去掉many=True参数,同时修正代码缩进(chalan_details_Schema的缩进要和类定义同级,避免成为类属性):
class ChalanProductsSchema(Schema): product_id = fields.Str(required=True) class ChalanDetailsSchema(Schema): chalan_id = fields.Str(required=True) rows = fields.Nested(ChalanProductsSchema, many=True) # 去掉many=True,修正缩进 chalan_details_Schema = ChalanDetailsSchema() # 序列化JSON data = chalan_details_Schema.load(json_data)
方式二:修改Postman传入的JSON(适配数组格式)
如果业务场景确实需要接收多个ChalanDetails对象,保持many=True不变,将Postman的JSON改为数组格式:
[ { "chalan_id":"2022.08.0002", "rows":[ { "product_id":"XXXXXXXX1" }, { "product_id":"XXXXXXXX2" } ] } ]
额外注意点
原代码中chalan_details_Schema的缩进属于ChalanDetailsSchema类内部,会被当作类属性而非全局的Schema实例,这也可能导致后续调用异常,务必修正缩进。
内容的提问来源于stack exchange,提问作者MNIP
相关产品推荐
相关产品推荐

