File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -903,6 +903,7 @@ def model_dump(
903903 warnings : bool | Literal ["none" , "warn" , "error" ] = True ,
904904 fallback : Callable [[Any ], Any ] | None = None , # v2.11
905905 serialize_as_any : bool = False , # v2.7
906+ polymorphic_serialization : bool | None = None , # v2.13
906907 ) -> builtins .dict [str , Any ]:
907908 if PYDANTIC_MINOR_VERSION < (2 , 11 ):
908909 by_alias = by_alias or False
@@ -913,6 +914,8 @@ def model_dump(
913914 extra_kwargs ["fallback" ] = fallback
914915 if PYDANTIC_MINOR_VERSION >= (2 , 12 ):
915916 extra_kwargs ["exclude_computed_fields" ] = exclude_computed_fields
917+ if PYDANTIC_MINOR_VERSION >= (2 , 13 ):
918+ extra_kwargs ["polymorphic_serialization" ] = polymorphic_serialization
916919 return super ().model_dump (
917920 mode = mode ,
918921 include = include ,
Original file line number Diff line number Diff line change 1+ from sqlmodel import SQLModel
2+
3+
4+ def test_polymorphic_serialization_default ():
5+
6+ class User (SQLModel ):
7+ name : str
8+
9+ class UserLogin (User ):
10+ password : str
11+
12+ class OuterModel (SQLModel ):
13+ user : User
14+
15+ outer_model = OuterModel (
16+ user = UserLogin (name = "pydantic" , password = "password" ),
17+ )
18+
19+ assert outer_model .model_dump () == {"user" : {"name" : "pydantic" }}
20+
21+
22+ def test_polymorphic_serialization_false ():
23+
24+ class User (SQLModel ):
25+ name : str
26+
27+ class UserLogin (User ):
28+ password : str
29+
30+ class OuterModel (SQLModel ):
31+ user : User
32+
33+ outer_model = OuterModel (
34+ user = UserLogin (name = "pydantic" , password = "password" ),
35+ )
36+
37+ assert outer_model .model_dump (polymorphic_serialization = False ) == {
38+ "user" : {"name" : "pydantic" }
39+ }
40+
41+
42+ def test_polymorphic_serialization_true ():
43+
44+ class User (SQLModel ):
45+ name : str
46+
47+ class UserLogin (User ):
48+ password : str
49+
50+ class OuterModel (SQLModel ):
51+ user : User
52+
53+ outer_model = OuterModel (
54+ user = UserLogin (name = "pydantic" , password = "password" ),
55+ )
56+
57+ assert outer_model .model_dump (polymorphic_serialization = True ) == {
58+ "user" : {"name" : "pydantic" , "password" : "password" }
59+ }
You can’t perform that action at this time.
0 commit comments