From bee1f08f5818be32b6d632177b82181c048d3126 Mon Sep 17 00:00:00 2001 From: Jan-Jelle Kester Date: Mon, 16 Feb 2015 21:46:35 +0100 Subject: [PATCH] Support both int and long types for numeric primary keys Issue #10 --- .../0002_auto_support_long_primary_keys.py | 20 +++++++++++++++++++ src/auditlog/models.py | 6 +++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 src/auditlog/migrations/0002_auto_support_long_primary_keys.py diff --git a/src/auditlog/migrations/0002_auto_support_long_primary_keys.py b/src/auditlog/migrations/0002_auto_support_long_primary_keys.py new file mode 100644 index 0000000..3da4843 --- /dev/null +++ b/src/auditlog/migrations/0002_auto_support_long_primary_keys.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('auditlog', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='logentry', + name='object_id', + field=models.BigIntegerField(db_index=True, null=True, verbose_name='object id', blank=True), + preserve_default=True, + ), + ] diff --git a/src/auditlog/models.py b/src/auditlog/models.py index 9925aa5..1223a6b 100644 --- a/src/auditlog/models.py +++ b/src/auditlog/models.py @@ -25,7 +25,7 @@ class LogEntryManager(models.Manager): kwargs.setdefault('object_pk', pk) kwargs.setdefault('object_repr', str(instance)) - if isinstance(pk, long): + if isinstance(pk, (int, long)): kwargs.setdefault('object_id', pk) # Delete log entries with the same pk as a newly created model. This should only be necessary when an pk is @@ -50,7 +50,7 @@ class LogEntryManager(models.Manager): content_type = ContentType.objects.get_for_model(instance.__class__) pk = self._get_pk_value(instance) - if isinstance(pk, int): + if isinstance(pk, (int, long)): return self.filter(content_type=content_type, object_id=pk) else: return self.filter(content_type=content_type, object_pk=pk) @@ -104,7 +104,7 @@ class LogEntry(models.Model): content_type = models.ForeignKey('contenttypes.ContentType', on_delete=models.CASCADE, related_name='+', verbose_name=_("content type")) object_pk = models.TextField(verbose_name=_("object pk")) - object_id = models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name=_("object id")) + object_id = models.BigIntegerField(blank=True, db_index=True, null=True, verbose_name=_("object id")) object_repr = models.TextField(verbose_name=_("object representation")) action = models.PositiveSmallIntegerField(choices=Action.choices, verbose_name=_("action")) changes = models.TextField(blank=True, verbose_name=_("change message"))