Pydantic嵌套模型验证失败:driver_categories字段缺失问题排查
问题
我尝试在Pydantic模型中嵌套另一个已有的Pydantic模型,编写了如下两个模型:
class DriverCategoryOut(BaseModel): internal_id: int category: str class Config: orm_mode = True
class DocListOut(BaseModel): driver_categories: DriverCategoryOut class Config: orm_mode = True
在FastAPI路由中设置response_model为shemas.DocListOut:
@router.get('/document', response_model=shemas.DocListOut) def get_doc_list(db: Session = Depends(get_db)): driver_categories = db.query(DriverCategory).first() return driver_categories
此时出现错误:
pydantic.error_wrappers.ValidationError: 1 validation error for DocListOut response -> driver_categories field required (type=value_error.missing)
但将response_model改为shemas.DriverCategoryOut则可以正常运行,请问DocListOut模型存在什么问题?
原因与解决方法
- 核心问题:你返回的
driver_categories是单个DriverCategory类型对象(或符合DriverCategoryOut结构的单条数据),但DocListOut要求的是包含driver_categories字段的外层对象,而非直接返回单条分类数据。 - 解决方式1:调整返回格式匹配模型
在路由里把返回值包装成符合DocListOut结构的字典:@router.get('/document', response_model=shemas.DocListOut) def get_doc_list(db: Session = Depends(get_db)): driver_categories = db.query(DriverCategory).first() return {"driver_categories": driver_categories} - 解决方式2:修正模型适配列表场景(如果需求是返回多条数据)
从DocListOut的命名来看,你可能原本想返回多个分类数据,此时需要把字段定义为列表类型:
同时路由查询所有数据并包装返回:class DocListOut(BaseModel): driver_categories: list[DriverCategoryOut] # Python3.9+可用,低版本用 typing.List[DriverCategoryOut] class Config: orm_mode = True@router.get('/document', response_model=shemas.DocListOut) def get_doc_list(db: Session = Depends(get_db)): driver_categories = db.query(DriverCategory).all() return {"driver_categories": driver_categories}
内容的提问来源于stack exchange,提问作者Wicked
相关产品推荐
相关产品推荐

