From dc9d6739fe04ac98693d3739596ed90e36b0b525 Mon Sep 17 00:00:00 2001 From: "John R. Tipton" Date: Thu, 12 Feb 2015 15:54:59 -0500 Subject: [PATCH 1/3] - Compatibility with django-polymorphic django-polymorphic self._get_pk_value returns the class object. If this happens, we try adding _id to the pk_field. --- src/auditlog/models.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/auditlog/models.py b/src/auditlog/models.py index a0f409e..f72d4b3 100644 --- a/src/auditlog/models.py +++ b/src/auditlog/models.py @@ -63,7 +63,12 @@ class LogEntryManager(models.Manager): Get the primary key field value for a model instance. """ pk_field = instance._meta.pk.name - return getattr(instance, pk_field, None) + pk = getattr(instance, pk_field, None) + + # Check to make sure that we got an pk not a class object. + if hasattr(pk, '__class__'): + pk = getattr(instance, '%s_id' % pk_field, None) + return pk class LogEntry(models.Model): From 16a55e1924e4a0c0083999d6899d3ba1ce438547 Mon Sep 17 00:00:00 2001 From: "John R. Tipton" Date: Fri, 13 Feb 2015 09:23:23 -0500 Subject: [PATCH 2/3] - Compatibility with django-polymorphic Check for _meta attribute instead of __class__, since an integer has an __class__ attribute. --- src/auditlog/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auditlog/models.py b/src/auditlog/models.py index f72d4b3..12f8f5f 100644 --- a/src/auditlog/models.py +++ b/src/auditlog/models.py @@ -66,7 +66,7 @@ class LogEntryManager(models.Manager): pk = getattr(instance, pk_field, None) # Check to make sure that we got an pk not a class object. - if hasattr(pk, '__class__'): + if hasattr(pk, '_meta'): pk = getattr(instance, '%s_id' % pk_field, None) return pk From cc2e489f756a48e4b5cb5af05a3bc406b3a75add Mon Sep 17 00:00:00 2001 From: "John R. Tipton" Date: Thu, 19 Feb 2015 09:03:39 -0500 Subject: [PATCH 3/3] - Check for model using isinstance - Check for model using isinstance and pk using _get_pk_value --- src/auditlog/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/auditlog/models.py b/src/auditlog/models.py index 12f8f5f..64051ee 100644 --- a/src/auditlog/models.py +++ b/src/auditlog/models.py @@ -65,9 +65,9 @@ class LogEntryManager(models.Manager): pk_field = instance._meta.pk.name pk = getattr(instance, pk_field, None) - # Check to make sure that we got an pk not a class object. - if hasattr(pk, '_meta'): - pk = getattr(instance, '%s_id' % pk_field, None) + # Check to make sure that we got an pk not a model object. + if isinstance(pk, models.Model): + pk = self._get_pk_value(pk) return pk