Eso*_*ack 14 python pydantic fastapi
我有以下 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
Run Code Online (Sandbox Code Playgroud)
我的目标是能够将空字符串视为空值,但它似乎不起作用。
Report(id=5,name="Steve",grade=0.5)
创建一个实例,其中proportion=Nonebut...
Report(id=5,name="Steve",grade=0.5,proportion="")抛出 error value is not a valid float (type=type_error.float)。我怎样才能得到与第一种情况相同的结果?
Fac*_*lla 21
派丹蒂克==1.9.0
最好的办法
from pydantic import BaseModel, Field
"""
The first argument of Field is 'default', refers to default value of attribute,
if is '...' it means is 'required', if no value is assigned, it defaults to 'undefined'
"""
class Report(BaseModel):
id: int = Field(..., gt=0) # ... is required, and gt is 'greater than'
name: str = Field(..., min_length=1)
grade: float = Field(0.0, gt=0)
proportion: float = Field(0.0, gt=0)
Run Code Online (Sandbox Code Playgroud)
另一种方式(我不推荐它,但你可能会在其他地方看到它。)
from decimal import Decimal
from pydantic import BaseModel, constr, condecimal, conint
class Report(BaseModel):
id: conint(gt=0)
name: constr(min_length=1)
grade: condecimal(gt=Decimal(0.0)) = 0.0
proportion: condecimal(gt=Decimal(0.0)) = 0.0
Run Code Online (Sandbox Code Playgroud)
检查:https://pydantic-docs.helpmanual.io/usage/types/#constrained-types
from decimal import Decimal
from pydantic import ConstrainedStr, ConstrainedInt, ConstrainedDecimal
class IdValidator(ConstrainedInt):
gt=0
class NameValidator(ConstrainedStr):
min_length=1
class DecimalValidator(ConstrainedDecimal):
gt=Decimal(0.0)
class Report(BaseModel):
id: IdValidator
name: NameValidator
grade: DecimalValidator = None
proportion: DecimalValidator = None
Run Code Online (Sandbox Code Playgroud)
这对我来说适用于 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
Run Code Online (Sandbox Code Playgroud)
创建Optional相当于 的类型约束Union[float, None]。
将空白字符串转换为 None 满足类型约束。
| 归档时间: |
|
| 查看次数: |
21333 次 |
| 最近记录: |