问题
When assigning an incorrect attribute to a Pydantic model field, no validation error occurs.
from pydantic import BaseModel
class pyUser(BaseModel):
username: str
class Config:
validate_all = True
validate_assignment = True
person = pyUser(username=1234)
person.username
>>>1234
try_again = pyUser()
pydantic.error_wrappers.ValidationError:
[ErrorWrapper(exc=MissingError(), loc=('username',))]
<class '__main__.pyUser'>
How can I get pydantic to validate on assignment?
回答1:
It is expected behaviour according to the documentation:
str
strings are accepted as-is,
int
,float
andDecimal
are coerced usingstr(v)
You can use the StrictStr
, StrictInt
, StrictFloat
, and StrictBool
types to prevent coercion from compatible types.
from pydantic import BaseModel, StrictStr
class pyUser(BaseModel):
username: StrictStr
class Config:
validate_all = True
validate_assignment = True
person = pyUser(username=1234) # ValidationError `str type expected`
print(person.username)
来源:https://stackoverflow.com/questions/65213809/pydantic-model-does-not-validate-on-assignment-with-reproducable-code