Skip to content

Commit 66e1bfe

Browse files
committed
Fix sqlmodel field being overide by pydantic
1 parent a85de91 commit 66e1bfe

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

sqlmodel/main.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,14 @@ def get_config(name: str) -> Any:
562562
# If it was passed by kwargs, ensure it's also set in config
563563
set_config_value(model=new_cls, parameter="table", value=config_table)
564564
for k, v in get_model_fields(new_cls).items():
565-
col = get_column_from_field(v)
565+
original_field = getattr(v, "_original_assignment", Undefined)
566+
annotated_field_meta = new_cls.__annotations__[k].__dict__.get("__metadata__", [])
567+
annotated_field = next((f for f in annotated_field_meta if isinstance(f, FieldInfo)), None)
568+
field = original_field if isinstance(original_field, FieldInfo) else (annotated_field or v)
569+
# Get the original sqlmodel FieldInfo, pydantic >=v2.12 changes the model
570+
field.annotation = v.annotation
571+
# Guarantee the field has the correct type
572+
col = get_column_from_field(field)
566573
setattr(new_cls, k, col)
567574
# Set a config flag to tell FastAPI that this should be read with a field
568575
# in orm_mode instead of preemptively converting it to a dict.

0 commit comments

Comments
 (0)