Skip to content

Commit 34d2a45

Browse files
committed
fix: Add Pydantic v2 alias support with backward compatibility
This commit fixes Field(alias="...") functionality in Pydantic v2 while maintaining full backward compatibility with Pydantic v1.
1 parent 3cc2b1e commit 34d2a45

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

sqlmodel/main.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,6 @@ def Field(
397397
current_schema_extra = schema_extra or {}
398398
field_info_kwargs = {
399399
"alias": alias,
400-
"validation_alias": validation_alias,
401-
"serialization_alias": serialization_alias,
402400
"title": title,
403401
"description": description,
404402
"exclude": exclude,
@@ -433,6 +431,13 @@ def Field(
433431
**current_schema_extra,
434432
}
435433
if IS_PYDANTIC_V2:
434+
# Add Pydantic v2 specific parameters
435+
field_info_kwargs.update(
436+
{
437+
"validation_alias": validation_alias,
438+
"serialization_alias": serialization_alias,
439+
}
440+
)
436441
field_info = FieldInfo(
437442
default,
438443
default_factory=default_factory,

tests/test_aliases.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def test_dict_default_uses_field_names(
9797
model: Union[Type[PydanticUser], Type[SQLModelUser]],
9898
):
9999
user = model(fullName="Dana")
100-
data = user.model_dump()
100+
data = user.dict()
101101
assert "full_name" in data
102102
assert "fullName" not in data
103103
assert data["full_name"] == "Dana"
@@ -111,7 +111,7 @@ def test_dict_default_uses_aliases(
111111
model: Union[Type[PydanticUser], Type[SQLModelUser]],
112112
):
113113
user = model(fullName="Dana")
114-
data = user.model_dump(by_alias=True)
114+
data = user.dict(by_alias=True)
115115
assert "fullName" in data
116116
assert "full_name" not in data
117117
assert data["fullName"] == "Dana"
@@ -125,7 +125,7 @@ def test_json_by_alias(
125125
model: Union[Type[PydanticUser], Type[SQLModelUser]],
126126
):
127127
user = model(fullName="Frank")
128-
json_data = user.model_dump_json(by_alias=True)
128+
json_data = user.json(by_alias=True)
129129
assert ('"fullName":"Frank"' in json_data) or ('"fullName": "Frank"' in json_data)
130130
assert "full_name" not in json_data
131131

@@ -169,7 +169,7 @@ def test_serialize_with_serialization_alias(
169169
model: Union[Type[PydanticUserV2], Type[SQLModelUserV2]],
170170
):
171171
user = model(firstName="Jane")
172-
data = user.model_dump(by_alias=True)
172+
data = user.dict(by_alias=True)
173173
assert "f_name" in data
174174
assert "firstName" not in data
175175
assert "first_name" not in data

0 commit comments

Comments
 (0)