From faf840f924c6d8432c88c70ae949c8b14f0d72ed Mon Sep 17 00:00:00 2001 From: Paul Swartz Date: Mon, 25 Mar 2013 10:59:31 -0400 Subject: [PATCH] only mark a field as changed if the value has changed Prevents spurious changes from being recorded. --- AUTHORS | 1 + mongoengine/base.py | 14 ++++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/AUTHORS b/AUTHORS index 82a1dfa4..3d05cc41 100644 --- a/AUTHORS +++ b/AUTHORS @@ -128,3 +128,4 @@ that much better: * Peter Teichman * Jakub Kot * Jorge Bastida + * Paul Swartz \ No newline at end of file diff --git a/mongoengine/base.py b/mongoengine/base.py index f73af4cc..0e46248f 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -205,8 +205,12 @@ class BaseField(object): def __set__(self, instance, value): """Descriptor for assigning a value to a field in a document. """ - instance._data[self.name] = value - if instance._initialised: + changed = False + if (self.name not in instance._data or + instance._data[self.name] != value): + changed = True + instance._data[self.name] = value + if changed and instance._initialised: instance._mark_as_changed(self.name) def error(self, message="", errors=None, field_name=None): @@ -317,12 +321,6 @@ class ComplexBaseField(BaseField): return value - def __set__(self, instance, value): - """Descriptor for assigning a value to a field in a document. - """ - instance._data[self.name] = value - instance._mark_as_changed(self.name) - def to_python(self, value): """Convert a MongoDB-compatible type to a Python type. """