# Do not set values as in Pydantic, pass them through setattr, so SQLAlchemy
# can handle them
# object.__setattr__(__pydantic_self__, '__dict__', values)
- object.__setattr__(__pydantic_self__, "__fields_set__", fields_set)
for key, value in values.items():
setattr(__pydantic_self__, key, value)
+ object.__setattr__(__pydantic_self__, "__fields_set__", fields_set)
non_pydantic_keys = data.keys() - values.keys()
for key in non_pydantic_keys:
if key in __pydantic_self__.__sqlmodel_relationships__:
--- /dev/null
+from datetime import datetime, timedelta
+
+from sqlmodel import Field, SQLModel
+
+
+def test_fields_set():
+ class User(SQLModel):
+ username: str
+ email: str = "test@test.com"
+ last_updated: datetime = Field(default_factory=datetime.now)
+
+ user = User(username="bob")
+ assert user.__fields_set__ == {"username"}
+ user = User(username="bob", email="bob@test.com")
+ assert user.__fields_set__ == {"username", "email"}
+ user = User(
+ username="bob",
+ email="bob@test.com",
+ last_updated=datetime.now() - timedelta(days=1),
+ )
+ assert user.__fields_set__ == {"username", "email", "last_updated"}