使用flask-restplus-patched添加参数时报strict参数重复赋值错误
解决flask-restplus-patched中
strict参数重复传递的TypeError问题 我刚碰到过几乎一模一样的问题,咱们来拆解下这个错误的根源和解决办法:
问题根源
从报错堆栈能清晰定位到问题:你的AddUserParameters同时继承了PostFormParameters和BaseUserSchema,而这两个父类的初始化逻辑都在传递strict=True参数:
PostFormParameters的父类Parameters在初始化时会自动传入strict=TrueBaseUserSchema继承的ModelSchema初始化时也硬编码了strict=True
多重继承调用父类构造方法时,两个strict=True被同时传入,直接触发了got multiple values for keyword argument 'strict'的错误。
可行的解决方案
方案1:调整继承结构(推荐)
既然BaseUserSchema是用来定义模型字段的,我们可以让AddUserParameters只继承PostFormParameters,直接在类里定义需要的参数字段(或复用BaseUserSchema的字段),避免多重继承的参数冲突:
# parameters.py 修改后 from . import schemas from database.models import User from flask_restplus_patched import PostFormParameters from flask_marshmallow import base_fields class AddUserParameters(PostFormParameters): # 直接定义接口需要的参数字段,和BaseUserSchema保持一致 name = base_fields.String(required=True) email = base_fields.String(required=True) # 如果需要BaseUserSchema里的其他字段(比如risk),可以直接添加 risk = base_fields.Integer(required=False)
这种方式逻辑更清晰,也从根源上避免了参数冲突。
方案2:重写__init__方法手动处理冲突
如果一定要保留多重继承,可以重写AddUserParameters的构造方法,手动移除重复的strict参数:
# parameters.py 修改后 from . import schemas from database.models import User from flask_restplus_patched import PostFormParameters from flask_marshmallow import base_fields class AddUserParameters(PostFormParameters, schemas.BaseUserSchema): name = base_fields.String(required=True) email = base_fields.String(required=True) def __init__(self, *args, **kwargs): # 先弹出kwargs中可能存在的strict参数,避免重复传递 kwargs.pop('strict', None) # 手动传递一次strict=True super().__init__(*args, strict=True, **kwargs)
这样就能确保strict参数只被传递一次,解决冲突问题。
方案3:检查依赖版本
如果上面两种方法都无效,可以检查你使用的flask-restplus-patched、flask-marshmallow版本,可能是版本兼容导致的参数传递逻辑冲突,尝试升级或降级到稳定匹配的版本。
验证修改
改完之后重新启动Flask应用,应该就能正常加载@api.parameters装饰器,post接口也能正常接收参数创建用户了。
内容的提问来源于stack exchange,提问作者zfore
相关产品推荐
相关产品推荐

