如何使用pydantic来要求我的对象具有一个由变量设置的精确数值?
from pydantic import BaseModel, Field
var = 10.0
class Group(BaseModel):
value: Literal[var] # something like this
value: float = Field(..., eq=var) # or this此外,创建使用变量的pydantic类的最佳方法是什么?是否有一种方法可以在类(而不是工厂)中进行验证,以便使用同一个类来验证不同的值?
from typing import Literal, TypeVar
from pydantic import BaseModel, Field
TGroup = TypeVar("TGroup", bound="Group") # does not work
def factory(var: float) -> TGroup:
class Group(BaseModel):
value: Literal[var]
return Group
# instead do something like this
class Group(BaseModel):
def __init__(self, var: float, **data) -> None:
self.value: str = Field(..., regex=f'{var}')
super().__init__(**data)
obj = {'value': 10}
Group(var=10, **obj) # does not work发布于 2022-09-25 18:02:46
您可以使用validator来验证传递的值。
下面是您的代码可能是什么样子。不过,我对同名的两个变量有疑问.
from pydantic import BaseModel, ValidationError, validator
val: float = 10.0
class Group(BaseModel):
# Are you sure you can have to variables with the same name?
value: Literal[var] # something like this
value: float
@validator('value')
def check_value(cls, v):
if v == val:
return v
raise ValueError(f'Value must be equal to {val}')这里是官方文件
https://stackoverflow.com/questions/73831356
复制相似问题