如果在不使用验证器的情况下在字段中传递了None,我可以在pydantic中设置默认值吗?

时间:2020-08-15 16:40:01

标签: 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

如意代码:

class User(BaseModel):
      user: int
      s_name: str
      contract_ndfl: Optional[int] = 13
            

2 个答案:

答案 0 :(得分:0)

GitHub上的协作者说,只有通过当前编写的代码才能实现预期的目标。

答案 1 :(得分:0)

也许您可以在所有字段中使用验证器foo并为其定义BaseClass!

class NoneDefaultModel(BaseModel):

    @validator("*", pre=True)
    def not_none(cls, v, field):
        if field.default and v is None:
            return field.default
        else:
            return v

然后,您可以使用子类来实现您希望的代码:

class Bar(NoneDefaultModel):
    bar: int = 5

Bar(bar=None)
# Bar(bar=5)