Skip to content

Commit f8e15b2

Browse files
committed
Allow many_to_one() with arbitrary names
Without this change, the many side of the relationship is constrained to have a certain name ("user") in this case. This change allows other naming that is resolved via back_populates="field_name"
1 parent 3dcfc32 commit f8e15b2

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

fquery/sqlmodel.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,11 @@ def foreign_key(name):
5959
)
6060

6161

62-
def one_to_many():
63-
return field(default=None, metadata={"SQL": {"relationship": True}})
62+
def one_to_many(back_populates=None):
63+
return field(
64+
default=None,
65+
metadata={"SQL": {"relationship": True, "back_populates": back_populates}},
66+
)
6467

6568

6669
def many_to_one(key_column=None, back_populates=None):

tests/test_sqlmodel.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,21 @@ class User:
2525
updated_at: datetime = None
2626

2727
friend: Optional["User"] = foreign_key("users.id")
28-
reviews: List["Review"] = one_to_many()
28+
reviews: List["Review"] = one_to_many("author")
29+
visits: List["Visit"] = one_to_many()
2930

3031

3132
@sqlmodel
3233
class Review:
3334
id: int | None = None
3435
score: int
36+
author: Optional[User] = many_to_one("users.id")
37+
38+
39+
@sqlmodel
40+
class Visit:
41+
id: int | None = None
42+
place: str
3543
user: Optional[User] = many_to_one("users.id")
3644

3745

0 commit comments

Comments
 (0)