如何在 pydantic 中重用 root_validator
How to reuse a root_validator in pydantic
pydantic 文档有重用验证器的示例,是否可以重用根验证器?
是的,有可能而且API非常相似
示例:
from datetime import datetime
from pydantic import BaseModel, validator
from pydantic.class_validators import root_validator
def validate_start_time_before_end_time(cls, values):
"""
Reusable validator for pydantic models
"""
if values["start_time"] >= values["end_time"]:
raise ValueError("start_time must be before end_time")
return values
class Model1(BaseModel):
start_time: datetime
end_time: datetime
# validators
_datetime_order_validation = root_validator(allow_reuse=True)(
validate_start_time_before_end_time
)
class Model2(BaseModel):
start_time: datetime
end_time: datetime
# validators
_datetime_order_validation = root_validator(allow_reuse=True)(
validate_start_time_before_end_time
)
也可以像本例中那样参数化验证器https://github.com/samuelcolvin/pydantic/discussions/2938
pydantic 文档有重用验证器的示例,是否可以重用根验证器?
是的,有可能而且API非常相似
示例:
from datetime import datetime
from pydantic import BaseModel, validator
from pydantic.class_validators import root_validator
def validate_start_time_before_end_time(cls, values):
"""
Reusable validator for pydantic models
"""
if values["start_time"] >= values["end_time"]:
raise ValueError("start_time must be before end_time")
return values
class Model1(BaseModel):
start_time: datetime
end_time: datetime
# validators
_datetime_order_validation = root_validator(allow_reuse=True)(
validate_start_time_before_end_time
)
class Model2(BaseModel):
start_time: datetime
end_time: datetime
# validators
_datetime_order_validation = root_validator(allow_reuse=True)(
validate_start_time_before_end_time
)
也可以像本例中那样参数化验证器https://github.com/samuelcolvin/pydantic/discussions/2938