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)