Skip to content

Commit 680602b

Browse files
statt8900tiangolo
andauthored
🐛 Fix fields marked as "set" in models (#117)
Co-authored-by: Michael Statt <[email protected]> Co-authored-by: Sebastián Ramírez <[email protected]>
1 parent 9c68ce1 commit 680602b

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

sqlmodel/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,9 +499,9 @@ def __init__(__pydantic_self__, **data: Any) -> None:
499499
# Do not set values as in Pydantic, pass them through setattr, so SQLAlchemy
500500
# can handle them
501501
# object.__setattr__(__pydantic_self__, '__dict__', values)
502-
object.__setattr__(__pydantic_self__, "__fields_set__", fields_set)
503502
for key, value in values.items():
504503
setattr(__pydantic_self__, key, value)
504+
object.__setattr__(__pydantic_self__, "__fields_set__", fields_set)
505505
non_pydantic_keys = data.keys() - values.keys()
506506
for key in non_pydantic_keys:
507507
if key in __pydantic_self__.__sqlmodel_relationships__:

tests/test_fields_set.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from datetime import datetime, timedelta
2+
3+
from sqlmodel import Field, SQLModel
4+
5+
6+
def test_fields_set():
7+
class User(SQLModel):
8+
username: str
9+
email: str = "[email protected]"
10+
last_updated: datetime = Field(default_factory=datetime.now)
11+
12+
user = User(username="bob")
13+
assert user.__fields_set__ == {"username"}
14+
user = User(username="bob", email="[email protected]")
15+
assert user.__fields_set__ == {"username", "email"}
16+
user = User(
17+
username="bob",
18+
19+
last_updated=datetime.now() - timedelta(days=1),
20+
)
21+
assert user.__fields_set__ == {"username", "email", "last_updated"}

0 commit comments

Comments
 (0)