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

如何在FastAPI中实现支持空字典或None的Pydantic模型字段?

解决方案:将空字典自动转为None的Pydantic模型

要实现需求,你可以通过Pydantic的**前置字段验证器(field_validator,mode='before')**处理空字典的转换逻辑,在字段验证前将空字典替换为None,同时保留原有类型的验证规则。

修改后的完整代码

from fastapi import FastAPI
from pydantic import BaseModel, field_validator

app = FastAPI()


class Wheel(BaseModel):
    diameter: int


class Car(BaseModel):
    wheel: Wheel | None = None

    @field_validator('wheel', mode='before')
    def convert_empty_dict_to_none(cls, value):
        # 检查传入值是否为空字典,是则返回None
        if value == {}:
            return None
        return value


@app.post("/test")
async def test(car: Car):
    print(f"{car=}")
    return car

测试验证

修改后四种测试场景均符合预期:

  • {"car": {"wheel": {"diameter": 10}}}:正常解析,car.wheel为Wheel(diameter=10)
  • {"car": {"wheel": null}}:正常保留None
  • {"car": {"wheel": {"foo": "bar"}}}:触发验证错误(缺少diameter字段),符合预期
  • {"car": {"wheel": {}}}:自动转为None,返回200,car.wheel值为None

逻辑说明

  • mode='before'指定验证器在字段类型解析之前执行,空字典会先被转为None,后续直接匹配Wheel | None类型中的None分支,不会触发Wheel模型的字段验证
  • 非空字典仍会正常进入Wheel模型的验证流程,确保数据格式合规

内容的提问来源于stack exchange,提问作者Aleksandr Shustrov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:12:35