@@ -242,6 +242,7 @@ def sqlmodel_table_construct(
242242 _extra = {}
243243 for k , v in values .items ():
244244 _extra [k ] = v
245+ setattr_ = object .__setattr__ if self_instance .model_config .get ("frozen" ) else setattr
245246 # SQLModel override, do not include everything, only the model fields
246247 # else:
247248 # fields_values.update(values)
@@ -251,7 +252,7 @@ def sqlmodel_table_construct(
251252 # object.__setattr__(new_obj, "__dict__", fields_values)
252253 # instrumentation
253254 for key , value in {** old_dict , ** fields_values }.items ():
254- setattr (self_instance , key , value )
255+ setattr_ (self_instance , key , value )
255256 # End SQLModel override
256257 object .__setattr__ (self_instance , "__pydantic_fields_set__" , _fields_set )
257258 if not cls .__pydantic_root_model__ :
@@ -268,7 +269,7 @@ def sqlmodel_table_construct(
268269 for key in self_instance .__sqlmodel_relationships__ :
269270 value = values .get (key , Undefined )
270271 if value is not Undefined :
271- setattr (self_instance , key , value )
272+ setattr_ (self_instance , key , value )
272273 # End SQLModel override
273274 return self_instance
274275
@@ -305,6 +306,7 @@ def sqlmodel_validate(
305306 context = context ,
306307 self_instance = new_obj ,
307308 )
309+ setattr_ = object .__setattr__ if new_obj .model_config .get ("frozen" ) else setattr
308310 # Capture fields set to restore it later
309311 fields_set = new_obj .__pydantic_fields_set__ .copy ()
310312 if not is_table_model_class (cls ):
@@ -314,15 +316,15 @@ def sqlmodel_validate(
314316 # Do not set __dict__, instead use setattr to trigger SQLAlchemy
315317 # instrumentation
316318 for key , value in {** old_dict , ** new_obj .__dict__ }.items ():
317- setattr (new_obj , key , value )
319+ setattr_ (new_obj , key , value )
318320 # Restore fields set
319321 object .__setattr__ (new_obj , "__pydantic_fields_set__" , fields_set )
320322 # Get and set any relationship objects
321323 if is_table_model_class (cls ):
322324 for key in new_obj .__sqlmodel_relationships__ :
323325 value = getattr (use_obj , key , Undefined )
324326 if value is not Undefined :
325- setattr (new_obj , key , value )
327+ setattr_ (new_obj , key , value )
326328 return new_obj
327329
328330
0 commit comments