diff --git a/sqlmodel/main.py b/sqlmodel/main.py index 38c85915aa..b77246b2cc 100644 --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@ -1001,9 +1001,8 @@ def sqlmodel_update( else: value = getattr(obj, key) setattr(self, key, value) - for remaining_key in use_update: + for remaining_key, value in use_update.items(): if remaining_key in get_model_fields(self): - value = use_update.pop(remaining_key) setattr(self, remaining_key, value) else: raise ValueError( diff --git a/tests/test_update.py b/tests/test_update.py new file mode 100644 index 0000000000..de4bd6cdd2 --- /dev/null +++ b/tests/test_update.py @@ -0,0 +1,20 @@ +from sqlmodel import Field, SQLModel + + +def test_sqlmodel_update(): + class Organization(SQLModel, table=True): + id: int = Field(default=None, primary_key=True) + name: str + headquarters: str + + class OrganizationUpdate(SQLModel): + name: str + + org = Organization(name="Example Org", city="New York", headquarters="NYC HQ") + org_in = OrganizationUpdate(name="Updated org") + org.sqlmodel_update( + org_in, + update={ + "headquarters": "-", # This field is in Organization, but not in OrganizationUpdate + }, + )