我有一个简单的pydantic类,其中有1个可选字段和一个带约束的必填字段。我想确保在创建和更新时验证约束项,同时保持可选字段可选。
如果我不使用MyConfig dataclass属性和validate_assignment属性true,我可以创建没有table_key属性的项目,但允许s3_target.target = 'BadPath'代码行。如果我不包括dataclass属性,那么我不必在创建时提供table_key,但允许s3_target更新行运行。
有没有什么方法可以让pydantic同时支持这两种场景?
from pydantic.dataclasses import dataclass
from pydantic import BaseModel, constr
from pydantic.class_validators import Optional
class MyConfig:
validate_assignment = True
@dataclass(config=MyConfig)
class S3Target(BaseModel):
table_key: Optional[str] = None
# target: str = Field(regex=r'^s3://([^/]+)/(.*?([^/]+))/$', description="must be a valid s3 path", )
target: constr(regex=r'^s3://([^/]+)/(.*?([^/]+))/$')
s3_target = S3Target(target='s3://bucket/location/')
s3_target.target = 'BadPath'
我尝试添加dataclass with validate_assignment=true,并期望Optional Field保持可选,不必将其传递到S3Target构造函数。我尝试将validate_assignment设置为False,它也不允许在没有table_key的情况下创建项。
1条答案
按热度按时间unftdfkk1#
Pydantic支持通过ModelConfig类上的
validate_assignment
选项进行赋值验证。将其设置为True
以获得所需的行为。不需要使用
dataclass
装饰器来实现这种行为。(我不知道如何在使用数据类装饰器时获得这种行为)