Skip to content

Commit db33ccb

Browse files
committed
Respect the to_field setting and the target field type
1 parent 351e845 commit db33ccb

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

simple_history/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ def copy_fields(self, model):
144144
FieldType = type(old_field)
145145
if django.get_version() >= "1.6":
146146
field_arguments['db_constraint'] = False
147+
if getattr(old_field, 'to_fields', []):
148+
field_arguments['to_field'] = old_field.to_fields[0]
147149
field = FieldType(
148150
old_field.rel.to,
149151
related_name='+',

simple_history/tests/models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,3 +250,12 @@ class UserAccessorOverride(models.Model):
250250
class Employee(models.Model):
251251
manager = models.OneToOneField('Employee', null=True)
252252
history = HistoricalRecords()
253+
254+
255+
class Country(models.Model):
256+
code = models.CharField(max_length=15, unique=True)
257+
258+
259+
class Province(models.Model):
260+
country = models.ForeignKey(Country, to_field='code')
261+
history = HistoricalRecords()

simple_history/tests/tests/test_models.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
AbstractBase, ConcreteAttr, ConcreteUtil, SelfFK, Temperature, WaterLevel,
1919
ExternalModel1, ExternalModel3, UnicodeVerboseName, HistoricalChoice,
2020
HistoricalState, HistoricalCustomFKError, Series, SeriesWork, PollInfo,
21-
UserAccessorDefault, UserAccessorOverride, Employee
21+
UserAccessorDefault, UserAccessorOverride, Employee, Country, Province
2222
)
2323
from ..external.models import ExternalModel2, ExternalModel4
2424

@@ -257,6 +257,15 @@ def test_self_referential_foreign_key(self):
257257
self.assertEqual([m.fk_id for m in model.history.all()],
258258
[other.id, model.id, None])
259259

260+
def test_to_field_foreign_key_save(self):
261+
country = Country.objects.create(code='US')
262+
country2 = Country.objects.create(code='CA')
263+
province = Province.objects.create(country=country)
264+
province.country = country2
265+
province.save()
266+
self.assertEqual([c.country_id for c in province.history.all()],
267+
[country2.code, country.code])
268+
260269
def test_raw_save(self):
261270
document = Document()
262271
document.save_base(raw=True)

0 commit comments

Comments
 (0)