Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
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.
  • Loading branch information
ravishan16 committed Sep 25, 2025
commit 34d2a4500e26a62f7b9e30982eebd44538e08859
9 changes: 7 additions & 2 deletions sqlmodel/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -397,8 +397,6 @@ def Field(
current_schema_extra = schema_extra or {}
field_info_kwargs = {
"alias": alias,
"validation_alias": validation_alias,
"serialization_alias": serialization_alias,
"title": title,
"description": description,
"exclude": exclude,
Expand Down Expand Up @@ -433,6 +431,13 @@ def Field(
**current_schema_extra,
}
if IS_PYDANTIC_V2:
# Add Pydantic v2 specific parameters
field_info_kwargs.update(
{
"validation_alias": validation_alias,
"serialization_alias": serialization_alias,
}
)
field_info = FieldInfo(
default,
default_factory=default_factory,
Expand Down
8 changes: 4 additions & 4 deletions tests/test_aliases.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def test_dict_default_uses_field_names(
model: Union[Type[PydanticUser], Type[SQLModelUser]],
):
user = model(fullName="Dana")
data = user.model_dump()
data = user.dict()
assert "full_name" in data
assert "fullName" not in data
assert data["full_name"] == "Dana"
Expand All @@ -111,7 +111,7 @@ def test_dict_default_uses_aliases(
model: Union[Type[PydanticUser], Type[SQLModelUser]],
):
user = model(fullName="Dana")
data = user.model_dump(by_alias=True)
data = user.dict(by_alias=True)
assert "fullName" in data
assert "full_name" not in data
assert data["fullName"] == "Dana"
Expand All @@ -125,7 +125,7 @@ def test_json_by_alias(
model: Union[Type[PydanticUser], Type[SQLModelUser]],
):
user = model(fullName="Frank")
json_data = user.model_dump_json(by_alias=True)
json_data = user.json(by_alias=True)
assert ('"fullName":"Frank"' in json_data) or ('"fullName": "Frank"' in json_data)
assert "full_name" not in json_data

Expand Down Expand Up @@ -169,7 +169,7 @@ def test_serialize_with_serialization_alias(
model: Union[Type[PydanticUserV2], Type[SQLModelUserV2]],
):
user = model(firstName="Jane")
data = user.model_dump(by_alias=True)
data = user.dict(by_alias=True)
assert "f_name" in data
assert "firstName" not in data
assert "first_name" not in data
Expand Down
Loading