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

FastAPI授权用户更新订单触发dict()无入参TypeError异常问题

问题原因
  • 核心错误出在路由函数的参数声明逻辑:你将请求体参数写为order=OrderModel,等价于给order参数设置默认值为OrderModel类本身,而非要求FastAPI将请求体解析为OrderModel的实例对象。
  • 你执行order.dict(exclude_unset=True)时,order是类对象,而dict()是模型的实例方法,调用时默认需要传入实例自身作为第一个位置参数,你直接用类调用且未传任何参数,就会触发对应的TypeError报错。
  • 更新用户的逻辑可正常运行,是因为用户接口的请求体参数声明正确,使用了类型注解user: UserModel,FastAPI会自动把请求JSON反序列化为模型实例,调用实例的dict()方法自然不会有参数错误。
修复方案
  • 第一步:修正请求体参数声明,将order=OrderModel改为order: OrderModel。注意此处的OrderModel必须是Pydantic模型,不能直接用数据库ORM模型作为请求体类型:
# 修正后的路由参数声明
async def update_by_order_id(order_id: str, order: OrderModel, Authorize: AuthJWT = Depends()):
  • 如果你原有代码中的OrderModel是数据库ORM模型,需要先定义专门用于更新请求的Pydantic schema:
from pydantic import BaseModel

class OrderUpdateSchema(BaseModel):
    # 按需定义允许更新的字段,可选字段设置默认值为None即可配合exclude_unset实现局部更新
    status: str | None = None
    amount: float | None = None
    # 其他允许用户更新的订单字段

再将参数类型替换为对应schema即可:order: OrderUpdateSchema

  • 第二步:补全返回语句遗漏的await关键字,from_queryset_single为协程方法,需要等待执行完成后再返回:
return await Order_Pydantic.from_queryset_single(Order.get(id=order_id))

内容的提问来源于stack exchange,提问作者Aremoh kenneth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:48:01