金字塔验证器删除空白字符串?

时间:2020-01-03 19:17:13

标签: python fastapi pydantic

我有以下Pydantic模型:

class Report(BaseModel):
    id: int
    name: str
    grade: float = None
    proportion: float = None

    @validator('*', pre=True)
    def blank_strings(cls, v):
        print(v)
        if v == "":
            return None
        return v

我在这里的目标是能够将空字符串忽略为空值,但似乎不起作用。

Report(id=5,name="Steve",grade=0.5) 创建一个实例,其中proportion=None但... Report(id=5,name="Steve",grade=0.5,proportion="")引发错误value is not a valid float (type=type_error.float)。如何获得与第一种情况相同的结果?

1 个答案:

答案 0 :(得分:0)

这对我有用 pydantic==1.6.1:

class Report(BaseModel):
    id: int
    name: str
    grade: Optional[float]
    proportion: Optional[float]

    @validator('proportion', pre=True)
    def blank_string(value, field):
        if value == "":
            return None
        return value

Optional 创建等效于 Union[float, None] 的类型约束。

将空字符串转换为 None 满足类型约束。