diff --git a/mongoengine/base.py b/mongoengine/base.py index c801c2ee..5a10cc73 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -1135,7 +1135,8 @@ class DataObserver(object): self.name = name def updated(self): - self.instance._mark_as_changed(self.name) + if hasattr(self.instance, '_mark_as_changed'): + self.instance._mark_as_changed(self.name) class BaseList(list): @@ -1146,6 +1147,11 @@ class BaseList(list): self.observer = observer super(BaseList, self).__init__(list_items) + def __getattribute__(self, name): + if name == 'observer' and not hasattr(self, 'observer'): + self.observer = DataObserver(None, None) + return super(BaseList, self).__getattribute__(name) + def __setitem__(self, *args, **kwargs): self.observer.updated() super(BaseList, self).__setitem__(*args, **kwargs) @@ -1198,6 +1204,11 @@ class BaseDict(dict): self.observer = observer super(BaseDict, self).__init__(dict_items) + def __getattribute__(self, name): + if name == 'observer' and not hasattr(self, 'observer'): + self.observer = DataObserver(None, None) + return super(BaseList, self).__getattribute__(name) + def __setitem__(self, *args, **kwargs): self.observer.updated() super(BaseDict, self).__setitem__(*args, **kwargs)