Python Marshmallow发送PUT请求设置字段为null的报错问题问询
Marshmallow PUT请求更新字段为null报错解决方案
核心原因定位
该错误为API服务端返回的参数校验异常,和你客户端侧的序列化配置无关,问题出在两个可能的环节:
- 服务端的FeatureSchema未对scaling字段开启null值允许
- 客户端传参逻辑错误,未正确将null值加入请求体
分步解决
1. 修正服务端Schema配置
Marshmallow默认所有字段不允许为null,你客户端侧的allow_none=True仅保证序列化dump时能正常输出null值,需要同步确认服务端对应的FeatureSchema中scaling字段也显式开启了配置:
# 服务端FeatureSchema必须也加allow_none=True scaling = mfields.String(allow_none=True)
2. 修正客户端调用逻辑
你的update方法中drop_keys_with_none_or_empty_values(locals())会默认移除所有值为None的字段,只有显式传入none_values_to_set参数指定要设为null的字段,才会将对应字段加入请求体。正确的调用方式为:
bc.update(id=1010, none_values_to_set=['scaling'])
3. 修正代码语法错误
你贴出的update方法参数定义中,scaling=None后缺少逗号,会导致参数解析异常,需修正为:
def update(self, id, name=None, description=None, fields=None, feature_file=None, imputation=None, template_type_id=None, scaling=None, none_values_to_set=None):
4. 确认服务端部分更新配置
如果该PUT接口为部分字段更新接口,需要确认服务端反序列化时开启了partial参数,避免必填字段校验报错:
# 服务端反序列化示例 validated_data = FeatureSchema().load(request.json, partial=True)
内容的提问来源于stack exchange,提问作者Harry Lingard-Bright
相关产品推荐
相关产品推荐

