From 7730a29aa3c5cb8565c54d1dd5427f8de04ecb59 Mon Sep 17 00:00:00 2001 From: Selim Belhaouane Date: Mon, 27 Apr 2020 15:19:38 -0400 Subject: [PATCH] move const validator to post validators. fixes #1410 --- changes/1410-selimb.md | 1 + pydantic/fields.py | 4 ++-- tests/test_main.py | 9 +++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 changes/1410-selimb.md diff --git a/changes/1410-selimb.md b/changes/1410-selimb.md new file mode 100644 index 00000000000..8ebdaaeda75 --- /dev/null +++ b/changes/1410-selimb.md @@ -0,0 +1 @@ +Move `const` validator to post-validators \ No newline at end of file diff --git a/pydantic/fields.py b/pydantic/fields.py index c4445871224..c49ad7f0470 100644 --- a/pydantic/fields.py +++ b/pydantic/fields.py @@ -510,11 +510,11 @@ def populate_validators(self) -> None: ) self.validators = prep_validators(v_funcs) - # Add const validator self.pre_validators = [] self.post_validators = [] + if self.field_info and self.field_info.const: - self.pre_validators = [make_generic_validator(constant_validator)] + self.post_validators.append(make_generic_validator(constant_validator)) if class_validators_: self.pre_validators += prep_validators(v.func for v in class_validators_ if not v.each_item and v.pre) diff --git a/tests/test_main.py b/tests/test_main.py index 71371d3bccb..8a054c36938 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -383,6 +383,15 @@ class Model(BaseModel): assert m.a == 3 +def test_const_validates_after_type_validators(): + # issue #1410 + class Model(BaseModel): + a: int = Field(3, const=True) + + m = Model(a="3") + assert m.a == 3 + + def test_const_with_wrong_value(): class Model(BaseModel): a: int = Field(3, const=True)