🐛 Fix fields marked as "set" in models (#117)
Co-authored-by: Michael Statt <michael.statt@modelyst.io> Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
This commit is contained in:
parent
9c68ce12ec
commit
680602b7eb
@ -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__:
|
||||
|
21
tests/test_fields_set.py
Normal file
21
tests/test_fields_set.py
Normal file
@ -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"}
|
Loading…
x
Reference in New Issue
Block a user