FastAPI创建任务接口要求传入ID问题求助
问题分析与解决方案
核心问题出在路由函数的请求体模型使用错误:
你的路由中,将请求体的类型注解设为了schemas.Task,而Task类包含id字段,FastAPI会据此校验用户请求必须传入id参数。但实际上,创建任务时用户不需要传入id(由数据库自动生成),应该用专门接收创建请求的TaskCreate模型作为请求体类型。
修改方法
修改路由代码中的请求体注解:
@app.post("/users/{user_id}/tasks", response_model=schemas.Task) async def create_task( task: schemas.TaskCreate, # 这里从schemas.Task改为schemas.TaskCreate current_user: schemas.User = Depends(deps.get_current_user), db: Session = Depends(deps.get_db) ): new_task = crud.create_user_task(db, task, current_user.id) return new_task
原理说明
TaskCreate继承自TaskBase,仅包含创建任务所需的title、description、user_id字段,没有id,正好匹配用户创建任务时的输入需求。response_model=schemas.Task保持不变,因为返回给前端的数据需要包含数据库自动生成的id,Task模型的orm_mode=True也能正确将SQLAlchemy的ORM对象转换为响应数据。
修改后,接口文档(/docs)中的请求参数将不再要求传入id,仅需提交title、description、user_id即可完成任务创建,数据库会自动生成id并返回给前端。
内容的提问来源于stack exchange,提问作者peetysmith
相关产品推荐
相关产品推荐

