diff --git a/docs/examples/models_dynamic_validators.py b/docs/examples/models_dynamic_validators.py new file mode 100644 index 0000000..132624c --- /dev/null +++ b/docs/examples/models_dynamic_validators.py @@ -0,0 +1,26 @@ +from pydantic import create_model, ValidationError, validator + + +def username_alphanumeric(cls, v): + assert v.isalnum(), 'must be alphanumeric' + return v + + +validators = { + 'username_validator': + validator('username')(username_alphanumeric) +} + +UserModel = create_model( + 'UserModel', + username=(str, ...), + __validators__=validators +) + +user = UserModel(username='scolvin') +print(user) + +try: + UserModel(username='scolvi%n') +except ValidationError as e: + print(e) diff --git a/docs/usage/models.md b/docs/usage/models.md index 69c07c5..c632af1 100644 --- a/docs/usage/models.md +++ b/docs/usage/models.md @@ -370,6 +370,12 @@ extending a base model with extra fields. {!.tmp_examples/models_dynamic_inheritance.py!} ``` +You can also add validators by passing a dict to the `__validators__` argument. + +```py +{!.tmp_examples/models_dynamic_validators.py!} +``` + ## Custom Root Types Pydantic models can be defined with a custom root type by declaring the `__root__` field.