Skip to content

Commit 9d96e1d

Browse files
committed
Fix handling of Annotated types in relationship annotations
1 parent 7bcbfaf commit 9d96e1d

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

sqlmodel/_compat.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ def get_relationship_to(
178178
# If a list, then also get the real field
179179
elif origin is list:
180180
use_annotation = get_args(annotation)[0]
181+
182+
elif origin is Annotated:
183+
use_annotation = get_args(annotation)[0]
181184

182185
return get_relationship_to(
183186
name=name, rel_info=rel_info, annotation=use_annotation

sqlmodel/main.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -528,17 +528,16 @@ def __new__(
528528
pydantic_annotations = {}
529529
relationship_annotations = {}
530530
for k, v in class_dict.items():
531-
if isinstance(v, RelationshipInfo):
531+
a = original_annotations.get(k, None)
532+
r = get_annotated_relationshipinfo(a)
533+
if r is not None:
534+
relationships[k] = r
535+
elif isinstance(v, RelationshipInfo):
532536
relationships[k] = v
533537
else:
534538
dict_for_pydantic[k] = v
535539
for k, v in original_annotations.items():
536-
# check for `field: Annotated[Any, Relationship()]`
537-
t = get_annotated_relationshipinfo(v)
538-
if t:
539-
relationships[k] = t
540-
relationship_annotations[k] = get_args(v)[0]
541-
elif k in relationships:
540+
if k in relationships:
542541
relationship_annotations[k] = v
543542
else:
544543
pydantic_annotations[k] = v
@@ -628,6 +627,9 @@ def __init__(
628627
origin: Any = get_origin(raw_ann)
629628
if origin is Mapped:
630629
ann = raw_ann.__args__[0]
630+
if origin is Annotated:
631+
ann = get_args(raw_ann)[0]
632+
cls.__annotations__[rel_name] = Mapped[ann]
631633
else:
632634
ann = raw_ann
633635
# Plain forward references, for models not yet defined, are not

0 commit comments

Comments
 (0)