From c2ef15607e4cefe5ee9f0f3bbce2fd19e5af30a5 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 24 Jul 2023 12:25:26 -0400 Subject: [PATCH] Revert "Remove _initialized flag from TrackingModelMixin" This reverts commit e7481f3bccf2e4918daedae114a4f5868f5b5504. --- netbox/utilities/mixins.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/netbox/utilities/mixins.py b/netbox/utilities/mixins.py index da6de06fb..b56055a5e 100644 --- a/netbox/utilities/mixins.py +++ b/netbox/utilities/mixins.py @@ -11,6 +11,10 @@ class Tracker: class TrackingModelMixin: + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._initialized = True + @property def tracker(self): if not hasattr(self._state, "_tracker"): @@ -28,17 +32,18 @@ class TrackingModelMixin: self.tracker.changed = {} def __setattr__(self, name, value): - change_tracking_fields = registry['counter_fields'][self.__class__] - if name in change_tracking_fields: - if name not in self.tracker.changed: - if name in self.__dict__: - old_value = getattr(self, name) - if value != old_value: - self.tracker.changed[name] = old_value + if hasattr(self, "_initialized"): + change_tracking_fields = registry['counter_fields'][self.__class__] + if name in change_tracking_fields: + if name not in self.tracker.changed: + if name in self.__dict__: + old_value = getattr(self, name) + if value != old_value: + self.tracker.changed[name] = old_value + else: + self.tracker.changed[name] = DeferredAttribute else: - self.tracker.changed[name] = DeferredAttribute - else: - if value == self.tracker.changed[name]: - self.tracker.changed.pop(name) + if value == self.tracker.changed[name]: + self.tracker.changed.pop(name) super().__setattr__(name, value)