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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:03:01