Fyz*_*zys 7 python-3.x pydantic
如果在不使用验证器的情况下在字段中传递 None ,我可以在 pydantic 中设置默认值吗?
我有以下代码,但在我看来,这里的验证器对于contract_ndfl来说是多余的。有没有什么办法可以不用验证器呢?
我的代码:
class User(BaseModel):
user: int
s_name: str
contract_ndfl: Optional[int]
@validator('contract_ndfl')
def set_contract_ndfl(cls, v):
return v or 13
Run Code Online (Sandbox Code Playgroud)
如意代码:
class User(BaseModel):
user: int
s_name: str
contract_ndfl: Optional[int] = 13
Run Code Online (Sandbox Code Playgroud)
ale*_* li 13
也许您可以对所有字段使用验证器并为其定义一个 BaseClass!
class NoneDefaultModel(BaseModel):
@validator("*", pre=True)
def not_none(cls, v, field):
if all(
(
# Cater for the occasion where field.default in (0, False)
getattr(field, "default", None) is not None,
v is None,
)
):
return field.default
else:
return v
Run Code Online (Sandbox Code Playgroud)
然后你可以使用子类来实现你想要的代码:
class Bar(NoneDefaultModel):
bar: int = 5
Bar(bar=None)
# Bar(bar=5)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9771 次 |
最近记录: |