From 680602b7eb6723b1ea0f217e9122cd66d2866360 Mon Sep 17 00:00:00 2001 From: statt8900 <30441880+statt8900@users.noreply.github.com> Date: Sat, 27 Aug 2022 18:59:09 -0400 Subject: [PATCH] =?utf8?q?=F0=9F=90=9B=20Fix=20fields=20marked=20as=20"set?= =?utf8?q?"=20in=20models=20(#117)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Co-authored-by: Michael Statt Co-authored-by: Sebastián Ramírez --- sqlmodel/main.py | 2 +- tests/test_fields_set.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/test_fields_set.py diff --git a/sqlmodel/main.py b/sqlmodel/main.py index 86e28b33..8af077da 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -499,9 +499,9 @@ class SQLModel(BaseModel, metaclass=SQLModelMetaclass, registry=default_registry # 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__: diff --git a/tests/test_fields_set.py b/tests/test_fields_set.py new file mode 100644 index 00000000..56f4ad01 --- /dev/null +++ b/tests/test_fields_set.py @@ -0,0 +1,21 @@ +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"} -- 2.47.2