Skip to content

Commit b49104a

Browse files
committed
Support upcoming changes in Pydantic version 2.10.
Without this fix, any SQLModels with a `Field` that uses `default_factory=...` will brake with the following error message: `ValueError: 'validated_data' must be provided if 'call_default_factory' is True`. Made the fix backwards compatible.
1 parent 8f10485 commit b49104a

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

sqlmodel/_compat.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ def partial_init() -> Generator[None, None, None]:
7272

7373

7474
if IS_PYDANTIC_V2:
75+
import inspect
76+
7577
from annotated_types import MaxLen
7678
from pydantic import ConfigDict as BaseConfig
7779
from pydantic._internal._fields import PydanticMetadata
@@ -80,6 +82,10 @@ def partial_init() -> Generator[None, None, None]:
8082
from pydantic_core import PydanticUndefined as Undefined
8183
from pydantic_core import PydanticUndefinedType as UndefinedType
8284

85+
PYDANCTIC_FIELD_GET_DEFAULT_REQUIRES_VALIDATED_DATA = (
86+
"validated_data" in inspect.signature(FieldInfo.get_default).parameters
87+
)
88+
8389
# Dummy for types, to make it importable
8490
class ModelField:
8591
pass
@@ -252,8 +258,13 @@ def sqlmodel_table_construct(
252258
elif name in values:
253259
fields_values[name] = values.pop(name)
254260
elif not field.is_required():
255-
defaults[name] = field.get_default(call_default_factory=True,
256-
validated_data=fields_values)
261+
defaults[name] = (
262+
field.get_default(
263+
call_default_factory=True, validated_data=fields_values
264+
)
265+
if PYDANCTIC_FIELD_GET_DEFAULT_REQUIRES_VALIDATED_DATA
266+
else field.get_default(call_default_factory=True)
267+
)
257268
if _fields_set is None:
258269
_fields_set = set(fields_values.keys())
259270
fields_values.update(defaults)

0 commit comments

Comments
 (0)