From bbc076429aa4c819fe3cfd3bd29001905b25f940 Mon Sep 17 00:00:00 2001 From: Jarek Glowacki Date: Wed, 17 Aug 2016 11:48:27 +1000 Subject: [PATCH] Nicer solution --- model_utils/tracker.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/model_utils/tracker.py b/model_utils/tracker.py index 70bfd2a..6aa7d8a 100644 --- a/model_utils/tracker.py +++ b/model_utils/tracker.py @@ -69,6 +69,8 @@ class FieldInstanceTracker(object): class DeferredAttributeTracker(DeferredAttribute): def __get__(field, instance, owner): + if instance is None: + return field data = instance.__dict__ if data.get(field.field_name, field) is field: instance._deferred_fields.remove(field.field_name) @@ -81,14 +83,7 @@ class FieldInstanceTracker(object): self.instance._deferred_fields = self.instance.get_deferred_fields() for field in self.instance._deferred_fields: if django.VERSION >= (1, 10): - # Seems like a dj110 bug; have to consult the __dict__ of each - # parent class to find the desired field. - # TODO: Check if parents are being traversed in the correct order. - combined_dict = {} - for klass in self.instance.__class__._meta.get_parent_list(): - combined_dict.update(klass.__dict__) - combined_dict.update(self.instance.__class__.__dict__) - field_obj = combined_dict.get(field) + field_obj = getattr(self.instance.__class__, field) else: field_obj = self.instance.__class__.__dict__.get(field) field_tracker = DeferredAttributeTracker(