@@ -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
354358class 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