Skip to content

Commit 73d3395

Browse files
committed
Add ignore_empty Parameter to has_changed Method
1 parent 324ea2b commit 73d3395

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

model_utils/tracker.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,17 @@ def current(self, fields=None):
215215

216216
return {f: self.get_field_value(f) for f in fields}
217217

218-
def has_changed(self, field):
218+
def has_changed(self, field, ignore_empty=True):
219219
"""Returns ``True`` if field has changed from currently saved value"""
220220
if field in self.fields:
221221
# deferred fields haven't changed
222222
if field in self.deferred_fields and field not in self.instance.__dict__:
223223
return False
224-
return self.previous(field) != self.get_field_value(field)
224+
current_value = self.get_field_value(field)
225+
previous_value = self.previous(field)
226+
if ignore_empty and (previous_value is None and current_value == '' or previous_value == '' and current_value is None):
227+
return False
228+
return previous_value != current_value
225229
else:
226230
raise FieldError('field "%s" not tracked' % field)
227231

@@ -353,12 +357,16 @@ def __get__(self, instance, owner):
353357

354358
class ModelInstanceTracker(FieldInstanceTracker):
355359

356-
def has_changed(self, field):
360+
def has_changed(self, field, ignore_empty=True):
357361
"""Returns ``True`` if field has changed from currently saved value"""
358362
if not self.instance.pk:
359363
return True
360364
elif field in self.saved_data:
361-
return self.previous(field) != self.get_field_value(field)
365+
current_value = self.get_field_value(field)
366+
previous_value = self.previous(field)
367+
if ignore_empty and (previous_value is None and current_value == '' or previous_value == '' and current_value is None):
368+
return False
369+
return previous_value != current_value
362370
else:
363371
raise FieldError('field "%s" not tracked' % field)
364372

0 commit comments

Comments
 (0)