You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用flask-restplus-patched添加参数时报strict参数重复赋值错误

解决flask-restplus-patched中strict参数重复传递的TypeError问题

我刚碰到过几乎一模一样的问题,咱们来拆解下这个错误的根源和解决办法:

问题根源

从报错堆栈能清晰定位到问题:你的AddUserParameters同时继承了PostFormParameters和BaseUserSchema,而这两个父类的初始化逻辑都在传递strict=True参数:

  • PostFormParameters的父类Parameters在初始化时会自动传入strict=True
  • BaseUserSchema继承的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:52:15