schemas:两种定义方式的区别

material_records: dict = Field({}, description="物料记录")

material_records: dict = Field(default={}, examples=[{}], description="物料记录")

有什么区别?

这两个定义在 Pydantic 模型OpenAPI 文档生成中的行为有显著差异,具体分析如下:


1. `material_records: dict = Field({}, description="物料记录")

行为特点
  • 默认值
    通过 Field({}, ...) 直接设置字段的默认值为空字典 {}。当用户不提供 material_records 字段时,模型会自动填充默认值。

  • OpenAPI 文档
    • 不会显式生成示例值(examples),但默认值 {} 会被自动推导为字段的示例。

    • 文档中会显示 description="物料记录" 的描述信息。

  • 兼容性
    兼容 Pydantic V1 和 V2,无潜在语法问题。

示例请求
{
  "production_order_id": 1,
  "batch_number": "BATCH001",
  // 未传递 material_records 字段时,自动填充为 {}
}

2. material_records: dict = Field(default={}, examples=[{}], description="物料记录")

行为特点
  • 默认值
    通过 default={} 显式设置默认值,效果与 Field({}, ...) 相同。

  • OpenAPI 文档
    • 显式定义 examples=[{}],会在 OpenAPI 文档中展示一个 包含空字典的示例列表

    • 文档会同时显示 descriptionexamples

  • 潜在问题
    如果运行环境是 Pydantic V1,会因不支持 examples 参数而报错(TypeError: Field() got an unexpected keyword argument 'examples')。

示例请求
{
  "production_order_id": 1,
  "batch_number": "BATCH001",
  "material_records": {},  // OpenAPI 文档会显示此示例值
}

关键区别总结

特性Field({}, description=...)Field(default={}, examples=[{}], description=...)
默认值通过 Field({}) 隐式设置通过 default={} 显式设置
示例值无显式示例,OpenAPI 推导默认值 {} 为示例显式定义 examples=[{}],文档中显示指定示例
Pydantic V1 兼容性完全兼容不兼容(V1 不支持 examples 参数)
代码意图仅设置默认值和描述,简化代码明确控制示例值,增强文档可读性

如何选择?

  1. 需要兼容 Pydantic V1
    使用 Field({}, description=...),避免 examples 参数导致的报错。

  2. 需要 OpenAPI 文档精细化控制
    使用 Field(default={}, examples=[{}], description=...),确保文档中显示明确示例。

  3. 使用 Pydantic V2
    两种方式均合法,但推荐后者以提升文档可读性。


示例代码验证

from pydantic import BaseModel, Field

# 模型定义
class BatchRecordCreate(BaseModel):
    material_records: dict = Field(default={}, examples=[{}], description="物料记录")

# 请求验证(不传递 material_records)
data = {"production_order_id": 1, "batch_number": "BATCH001"}
model = BatchRecordCreate(**data)
print(model.material_records)  # 输出: {}

两种写法均可正确运行,但 examples 参数需要依赖 Pydantic V2 环境。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值