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

如何配置openapi-generator-cli使Pydantic模型可空字段保留None值

解决方案:让OpenAPI Generator生成的Python客户端保留所有可空None字段

方案1:修改OpenAPI Generator的Python模板(根治方法)

OpenAPI Generator依赖模板引擎生成代码,直接修改对应模板就能永久解决问题:

  • 找到Python生成器的模板文件,通常是model.mustache(如果是基于Pydantic v2的模板,对应model_pydantic_v2.mustache)
  • 定位到模板中生成model_dump调用的代码段,把exclude_none=True改成exclude_none=False
  • 生成客户端时,通过--template-dir参数指定自定义模板目录:
openapi-generator-cli generate -i your-swagger.yaml -g python -o ./client --template-dir ./custom-templates

方案2:修改生成代码的基类(快速临时修复)

如果不想折腾模板,直接修改生成代码的基类就能批量生效:

  • 找到生成客户端中的基类文件,比如api_client/models/base_model.py(不同版本路径可能略有差异)
  • 找到to_dict方法里的model_dump调用,将exclude_none=True改为exclude_none=False
  • 所有继承该基类的模型都会自动应用这个修改,无需逐个调整模型文件

方案3:修正OpenAPI规范定义(确保字段被正确标记为可空)

你之前用default: null的方式不符合规范要求,OpenAPI里需要明确标记字段为可空,才能让生成器识别为需要保留None值的字段:
修正你的Swagger片段,给每个可空字段加上nullable: true(OpenAPI 3.0+标准写法):

User:
  type: object
  required:
    - address
  properties:
    account:
      type: string
      nullable: true
    middleInitial:
      type: string
      nullable: true
    lastName: 
      type: string
      nullable: true
    firstName: 
      type: string
      nullable: true
    companyName:
      type: string
      nullable: true
    isOrganization: 
      type: boolean
      nullable: true
    address: 
      $ref: "#/components/schemas/Adress"

注意:default: null仅用于设置字段默认值,不会强制生成器在序列化时保留未初始化的None字段,必须结合nullable: true明确标记字段允许为空,再配合前面的模板/基类修改,才能达到预期效果。

额外提示

如果使用的是Pydantic v2,model_dump的exclude_none参数直接控制是否排除None值,改为False后,所有None值(包括未初始化的可空字段)都会被保留在序列化后的字典中,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:45