关于 pydantic 可选 / 必填字段的说明
v1:
对于 pydantic V1.2 之后来讲:
class Model(BaseModel):
a: int = None
b: Optional[int]
c: Optional[int] = None
d: Optional[int] = Field(None)
e: int
f: int = ...
g: Optional[int] = ...
h: Optional[int] = Field(...)
此实例中,
a
, b
, c
, d
是可选字段,也就是说在引用模型类时,可以省略不进行传递的参数。
e
, f
, g
, h
是必填字段,也就是说在引用模型类时,不可以省略的参数,必须将他们作为参数传递,并且只接受int
类型。
V2:
对于目前(2022.9.8)尚未发布的 pydantic V2 之后来讲:
class Model(BaseModel):
a: int = None
b: Optional[int] = None
c: Optional[int] = Field(None)
d: int
e: int = ...
f: Optional[int]
g: Optional[int] = ...
h: Optional[int] = Field(...)
请注意他发生了很大的实质性变化,此实例中,
a
, b
, c
是可选字段,也就是说在引用模型类时,可以省略不进行传递的参数。
d
, e
, f
, g
, h
是必填字段,也就是说在引用模型类时,不可以省略的参数,必须将他们作为参数传递,与 V1 不同的是,Optional[int]
变为了必填字段,但是除了int
类型,它还可以接收None
作为值进行传递,对于其他参数,只接受int
类型。
总结
不管使用 V1 还是 V2,当将模型类一个参数作为选填时,推荐使用Optional[xxx] = None
或Union[xxx, None] = None
,效果是一样的,看个人喜好,请不要直接使用Optional[xxx]
作为选填
字段,因为 V1 和 V2 将不兼容!
基于
Optional[]
与Union[]
该如何选择,请移步 using-union-or-optional