Skip to content

Commit 2dd529b

Browse files
committed
Removed CustomForeignKey for 1.8 compatability
1 parent 38792a7 commit 2dd529b

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

simple_history/models.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
from django.db.models import loading
1111
from django.db.models.fields.proxy import OrderWrt
1212
from django.db.models.fields.related import RelatedField
13-
from django.db.models.related import RelatedObject
13+
try:
14+
from django.db.models.fields.related import RelatedObject
15+
except ImportError:
16+
pass
1417
from django.conf import settings
1518
from django.contrib import admin
1619
from django.utils import importlib, six
@@ -121,18 +124,22 @@ def copy_fields(self, model):
121124
for field in model._meta.fields:
122125
field = copy.copy(field)
123126
field.rel = copy.copy(field.rel)
127+
if isinstance(field, OrderWrt):
128+
# OrderWrt is a proxy field, switch to a plain IntegerField
129+
field.__class__ = models.IntegerField
124130
if isinstance(field, models.ForeignKey):
125131
# Don't allow reverse relations.
126132
# ForeignKey knows best what datatype to use for the column
127133
# we'll used that as soon as it's finalized by copying rel.to
128-
field.__class__ = CustomForeignKeyField
134+
old_field = field
135+
field = type(field)(field.rel.to, related_name='+', null=True, blank=True)
136+
field.rel = old_field.rel
129137
field.rel.related_name = '+'
130-
field.null = True
131-
field.blank = True
132-
if isinstance(field, OrderWrt):
133-
# OrderWrt is a proxy field, switch to a plain IntegerField
134-
field.__class__ = models.IntegerField
135-
transform_field(field)
138+
field.name = old_field.name
139+
field.db_constraint = False
140+
field._unique = False
141+
else:
142+
transform_field(field)
136143
fields[field.name] = field
137144
return fields
138145

simple_history/tests/tests/test_models.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -488,11 +488,19 @@ def test_invalid_bases(self):
488488

489489
def test_import_related(self):
490490
field_object = HistoricalChoice._meta.get_field_by_name('poll_id')[0]
491-
self.assertEqual(field_object.related.model, Choice)
491+
try:
492+
related_model = field_object.rel.related_model
493+
except AttributeError: # Django<1.8
494+
related_model = field_object.related.model
495+
self.assertEqual(related_model, Choice)
492496

493497
def test_string_related(self):
494498
field_object = HistoricalState._meta.get_field_by_name('library_id')[0]
495-
self.assertEqual(field_object.related.model, State)
499+
try:
500+
related_model = field_object.rel.related_model
501+
except AttributeError: # Django<1.8
502+
related_model = field_object.related.model
503+
self.assertEqual(related_model, State)
496504

497505
@skipUnless(django.get_version() >= "1.7", "Requires 1.7 migrations")
498506
def test_state_serialization_of_customfk(self):

0 commit comments

Comments
 (0)