Skip to content

Commit 2153f86

Browse files
committed
Add polymorphic_serialization param to model_dump
1 parent 53cdb18 commit 2153f86

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

sqlmodel/main.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff 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,
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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+
}

0 commit comments

Comments
 (0)