@@ -90,7 +90,7 @@ def model_changed_fields(self) -> set[str]:
90
90
"""Return list of all changed fields, submodels are considered as one field"""
91
91
92
92
changed_fields = self .model_self_changed_fields .copy ()
93
- for field_name , model_field in self .model_fields .items ():
93
+ for field_name , model_field in self .__class__ . model_fields .items ():
94
94
# Support for instances created through model_construct, when not all fields have been defined
95
95
if field_name not in self .__dict__ :
96
96
continue
@@ -137,7 +137,7 @@ def model_changed_fields_recursive(self) -> set[str]:
137
137
"""Return a list of all changed fields recursive using dotted syntax"""
138
138
139
139
changed_fields = self .model_self_changed_fields .copy ()
140
- for field_name , model_field in self .model_fields .items ():
140
+ for field_name , model_field in self .__class__ . model_fields .items ():
141
141
field_value = self .__dict__ [field_name ]
142
142
143
143
# Value is a ChangeDetectionMixin instance itself
@@ -258,15 +258,15 @@ def __setattr__(self, name, value) -> None: # noqa: ANN001
258
258
259
259
# Get original value
260
260
original_update = {}
261
- if name in self .model_fields and name not in self .model_original :
261
+ if name in self .__class__ . model_fields and name not in self .model_original :
262
262
original_update [name ] = self .__dict__ [name ]
263
263
264
264
# Store changed value using pydantic
265
265
super ().__setattr__ (name , value )
266
266
267
267
# Check if value has actually been changed
268
268
has_changed = True
269
- if name in self .model_fields :
269
+ if name in self .__class__ . model_fields :
270
270
# Fetch original from original_update so we don't have to check everything again
271
271
original_value = original_update .get (name , None )
272
272
# Don't use value parameter directly, as pydantic validation might have changed it
0 commit comments