From: statt8900 <30441880+statt8900@users.noreply.github.com> Date: Sat, 27 Aug 2022 22:59:09 +0000 (-0400) Subject: 🐛 Fix fields marked as "set" in models (#117) X-Git-Tag: 0.0.7~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=680602b7eb6723b1ea0f217e9122cd66d2866360;p=thirdparty%2Ffastapi%2Fsqlmodel.git 🐛 Fix fields marked as "set" in models (#117) Co-authored-by: Michael Statt Co-authored-by: Sebastián Ramírez --- 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"}