Skip to content

Commit 4d4727e

Browse files
committed
Force OneToOne to be a ForeignKey on historical models
1 parent 062cf28 commit 4d4727e

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

CHANGES.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Changes
22
=======
33

4+
tip (unreleased)
5+
----------------
6+
- Fix OneToOneField transformation for historical models (gh-166)
7+
48
1.6.0 (2015-04-16)
59
------------------
610
- Add support for Django 1.8+

simple_history/models.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import copy
55
import warnings
66

7+
import django
78
from django.db import models, router
89
from django.db.models import loading
910
from django.db.models.fields.proxy import OrderWrt
@@ -129,18 +130,26 @@ def copy_fields(self, model):
129130
field.__class__ = models.IntegerField
130131
if isinstance(field, models.ForeignKey):
131132
old_field = field
132-
field = type(field)(
133-
field.rel.to,
133+
field_arguments = {}
134+
if (getattr(old_field, 'one_to_one', False) or
135+
isinstance(old_field, models.OneToOneField)):
136+
FieldType = models.ForeignKey
137+
else:
138+
FieldType = type(old_field)
139+
if django.get_version() >= "1.6":
140+
field_arguments['db_constraint'] = False
141+
field = FieldType(
142+
old_field.rel.to,
134143
related_name='+',
135144
null=True,
136145
blank=True,
137146
primary_key=False,
138147
db_index=True,
139148
serialize=True,
149+
unique=False,
150+
**field_arguments
140151
)
141-
field._unique = False
142152
field.name = old_field.name
143-
field.db_constraint = False
144153
else:
145154
transform_field(field)
146155
fields[field.name] = field

0 commit comments

Comments
 (0)