diff --git a/.travis.yml b/.travis.yml index dcfbbcd77..a0f858f3f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,12 @@ python: env: - DJANGO="Django>=1.4,<1.5" - DJANGO="Django>=1.6,<1.7" - - DJANGO="Django>=1.7,<1.8" + - DJANGO="Django>=1.7,<1.8a" + - DJANGO="Django>=1.8a,<1.9" install: - - pip install -U coverage coveralls $DJANGO + - pip install -U coverage coveralls + - pip install --pre -U $DJANGO - python -c 'from __future__ import print_function; import django; print("Django " + django.get_version())' script: coverage run -a setup.py test @@ -22,7 +24,9 @@ matrix: - python: 2.6 env: DJANGO="Django>=1.6,<1.7" - python: 2.6 - env: DJANGO="Django>=1.7,<1.8" + env: DJANGO="Django>=1.7,<1.8a" + - python: 2.6 + env: DJANGO="Django>=1.8a,<1.9" - python: 3.2 env: DJANGO="Django>=1.4,<1.5" - python: 3.3 @@ -30,6 +34,8 @@ matrix: include: - python: 3.4 - env: DJANGO="Django>=1.7,<1.8" + env: DJANGO="Django>=1.7,<1.8a" + - python: 3.4 + env: DJANGO="Django>=1.8a,<1.9" after_success: coveralls diff --git a/AUTHORS.rst b/AUTHORS.rst index dd057fc75..7c75443df 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -26,6 +26,7 @@ Authors - Trey Hunner - Ulysses Vilela - vnagendra +- Rod Xavier Bondoc Background ========== diff --git a/CHANGES.rst b/CHANGES.rst index fbcbc18f3..901514b0d 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,9 @@ Changes ======= +1.5.x(not yet released) +- Add support for Django 1.8+ + 1.5.4 (2015-01-03) ------------------ - Fix a bug when models have a ``ForeignKey`` with ``primary_key=True`` diff --git a/simple_history/models.py b/simple_history/models.py index 19f2e805f..96cb2c7a4 100644 --- a/simple_history/models.py +++ b/simple_history/models.py @@ -10,7 +10,10 @@ from django.db.models import loading from django.db.models.fields.proxy import OrderWrt from django.db.models.fields.related import RelatedField -from django.db.models.related import RelatedObject +try: + from django.db.models.fields.related import RelatedObject +except ImportError: + pass from django.conf import settings from django.contrib import admin from django.utils import importlib, six @@ -122,13 +125,24 @@ def copy_fields(self, model): field = copy.copy(field) field.rel = copy.copy(field.rel) if isinstance(field, models.ForeignKey): - # Don't allow reverse relations. - # ForeignKey knows best what datatype to use for the column - # we'll used that as soon as it's finalized by copying rel.to - field.__class__ = CustomForeignKeyField - field.rel.related_name = '+' - field.null = True - field.blank = True + if not 'RelatedObject' in globals(): + old_field = field + field = type(field)(field.rel.to, related_name='+', null=True, blank=True) + field.rel = old_field.rel + field.rel.related_name = '+' + field.name = old_field.name + field.db_constraint = False + field._unique = False + setattr(field, 'attname', field.name) + else: + # Don't allow reverse relations. + # ForeignKey knows best what datatype to use for the column + # we'll used that as soon as it's finalized by copying rel.to + # Django < 1.8 + field.__class__ = CustomForeignKeyField + field.rel.related_name = '+' + field.null = True + field.blank = True if isinstance(field, OrderWrt): # OrderWrt is a proxy field, switch to a plain IntegerField field.__class__ = models.IntegerField diff --git a/simple_history/tests/tests/test_models.py b/simple_history/tests/tests/test_models.py index eab1d2fed..db96c0b87 100644 --- a/simple_history/tests/tests/test_models.py +++ b/simple_history/tests/tests/test_models.py @@ -488,11 +488,19 @@ def test_invalid_bases(self): def test_import_related(self): field_object = HistoricalChoice._meta.get_field_by_name('poll_id')[0] - self.assertEqual(field_object.related.model, Choice) + try: + related_model = field_object.rel.related_model + except AttributeError: # Django<1.8 + related_model = field_object.related.model + self.assertEqual(related_model, Choice) def test_string_related(self): field_object = HistoricalState._meta.get_field_by_name('library_id')[0] - self.assertEqual(field_object.related.model, State) + try: + related_model = field_object.rel.related_model + except AttributeError: # Django<1.8 + related_model = field_object.related.model + self.assertEqual(related_model, State) @skipUnless(django.get_version() >= "1.7", "Requires 1.7 migrations") def test_state_serialization_of_customfk(self): diff --git a/tox.ini b/tox.ini index 2a0b534a4..e4a8a714c 100644 --- a/tox.ini +++ b/tox.ini @@ -3,6 +3,7 @@ envlist = py{26,27}-django14, py{26,27,32,33}-django16, py{27,32,33,34}-django17, + py{27,32,33,34}-django18, py{27,32,33,34}-djangotrunk, docs, flake8 @@ -31,6 +32,7 @@ deps = py26: unittest2 django14: Django>=1.4,<1.5 django16: Django>=1.6,<1.7 - django17: Django>=1.7,<1.8 + django17: Django>=1.7,<1.8a + django18: Django>=1.8a,<1.9a djangotrunk: https://github.com/django/django/tarball/master commands = coverage run -a --branch setup.py test