@@ -242,6 +242,9 @@ def sqlmodel_table_construct(
242242 _extra = {}
243243 for k , v in values .items ():
244244 _extra [k ] = v
245+ setattr_ = (
246+ object .__setattr__ if self_instance .model_config .get ("frozen" ) else setattr
247+ )
245248 # SQLModel override, do not include everything, only the model fields
246249 # else:
247250 # fields_values.update(values)
@@ -251,7 +254,7 @@ def sqlmodel_table_construct(
251254 # object.__setattr__(new_obj, "__dict__", fields_values)
252255 # instrumentation
253256 for key , value in {** old_dict , ** fields_values }.items ():
254- setattr (self_instance , key , value )
257+ setattr_ (self_instance , key , value )
255258 # End SQLModel override
256259 object .__setattr__ (self_instance , "__pydantic_fields_set__" , _fields_set )
257260 if not cls .__pydantic_root_model__ :
@@ -268,7 +271,7 @@ def sqlmodel_table_construct(
268271 for key in self_instance .__sqlmodel_relationships__ :
269272 value = values .get (key , Undefined )
270273 if value is not Undefined :
271- setattr (self_instance , key , value )
274+ setattr_ (self_instance , key , value )
272275 # End SQLModel override
273276 return self_instance
274277
@@ -305,6 +308,7 @@ def sqlmodel_validate(
305308 context = context ,
306309 self_instance = new_obj ,
307310 )
311+ setattr_ = object .__setattr__ if new_obj .model_config .get ("frozen" ) else setattr
308312 # Capture fields set to restore it later
309313 fields_set = new_obj .__pydantic_fields_set__ .copy ()
310314 if not is_table_model_class (cls ):
@@ -314,15 +318,15 @@ def sqlmodel_validate(
314318 # Do not set __dict__, instead use setattr to trigger SQLAlchemy
315319 # instrumentation
316320 for key , value in {** old_dict , ** new_obj .__dict__ }.items ():
317- setattr (new_obj , key , value )
321+ setattr_ (new_obj , key , value )
318322 # Restore fields set
319323 object .__setattr__ (new_obj , "__pydantic_fields_set__" , fields_set )
320324 # Get and set any relationship objects
321325 if is_table_model_class (cls ):
322326 for key in new_obj .__sqlmodel_relationships__ :
323327 value = getattr (use_obj , key , Undefined )
324328 if value is not Undefined :
325- setattr (new_obj , key , value )
329+ setattr_ (new_obj , key , value )
326330 return new_obj
327331
328332
0 commit comments