38 lines
960 B
Python
38 lines
960 B
Python
from pydantic import BaseModel, SerializeAsAny
|
|
|
|
|
|
class commonbase(
|
|
BaseModel,
|
|
revalidate_instances="subclass-instances", # toogle to generate error
|
|
): ...
|
|
|
|
|
|
class basechild(commonbase):
|
|
test_val: int = 1
|
|
|
|
|
|
class derivedchild(basechild):
|
|
test_val2: int = 2
|
|
|
|
|
|
class container(commonbase):
|
|
|
|
ct_child_1: dict[str, basechild] = {}
|
|
ct_child_2: SerializeAsAny[dict[str, basechild]] = {}
|
|
ct_child_3: dict[str, SerializeAsAny[basechild]] = {}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_val = container(
|
|
ct_child_1={"test1": derivedchild()},
|
|
ct_child_2={"test2": derivedchild()},
|
|
ct_child_3={"test3": derivedchild()},
|
|
)
|
|
|
|
print(test_val.model_dump_json(indent=1))
|
|
|
|
print(test_val.model_dump())
|
|
assert "test_val2" not in test_val.model_dump()["ct_child_1"]["test1"]
|
|
assert "test_val2" in test_val.model_dump()["ct_child_2"]["test2"]
|
|
assert "test_val2" in test_val.model_dump()["ct_child_3"]["test3"]
|