diff --git a/changes/1710-PrettyWood.md b/changes/1710-PrettyWood.md index 9faa736578..67926fe454 100644 --- a/changes/1710-PrettyWood.md +++ b/changes/1710-PrettyWood.md @@ -1 +1 @@ -fix validation of nested models with `default_factory` \ No newline at end of file +fix validation and parsing of nested models with `default_factory` \ No newline at end of file diff --git a/tests/test_main.py b/tests/test_main.py index 571a45f920..05e931a6df 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1186,6 +1186,19 @@ class Parent(BaseModel): Parent(children=[{'x': 1}, {'y': 2}]) +def test_default_factory_parse(): + class Inner(BaseModel): + val: int = Field(0) + + class Outer(BaseModel): + inner_1: Inner = Field(default_factory=Inner) + inner_2: Inner = Field(Inner()) + + default = Outer().dict() + parsed = Outer.parse_obj(default) + assert repr(parsed) == 'Outer(inner_1=Inner(val=0), inner_2=Inner(val=0))' + + @pytest.mark.skipif(sys.version_info < (3, 7), reason='field constraints are set but not enforced with python 3.6') def test_none_min_max_items(): # None default