summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-25 16:31:20 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-25 16:31:20 +0200
commit63eb23c8336cb78df9f2efe0f4d357abfca06dc4 (patch)
tree05294b754d86467dfad7e1b0d0a741d67533e96a
parent6a5b22f314d5a0ce7eed6417f2b3120152ca5763 (diff)
downloadIshtar-63eb23c8336cb78df9f2efe0f4d357abfca06dc4.tar.bz2
Ishtar-63eb23c8336cb78df9f2efe0f4d357abfca06dc4.zip
Merge: fix one to one field merge (such as person for ishtaruser)
-rw-r--r--ishtar_common/model_merging.py13
-rw-r--r--ishtar_common/tests.py7
2 files changed, 16 insertions, 4 deletions
diff --git a/ishtar_common/model_merging.py b/ishtar_common/model_merging.py
index a390f233c..3f392f596 100644
--- a/ishtar_common/model_merging.py
+++ b/ishtar_common/model_merging.py
@@ -22,7 +22,7 @@ def get_models():
@transaction.atomic
def merge_model_objects(primary_object, alias_objects=[], keep_old=False):
"""
- Use this function to merge model objects (i.e. Users, Organizations, Polls,
+ Use this function to merge model objects (i.e. Users, Organizations,
etc.) and migrate all of the related fields from the alias objects to the
primary object.
@@ -81,9 +81,14 @@ def merge_model_objects(primary_object, alias_objects=[], keep_old=False):
related_objects = getattr(alias_object, alias_varname)
except ObjectDoesNotExist:
continue
- for obj in related_objects.all():
- setattr(obj, obj_varname, primary_object)
- obj.save()
+ if not hasattr(related_objects, 'all'):
+ # one to one field
+ setattr(related_objects, obj_varname, primary_object)
+ related_objects.save()
+ else:
+ for obj in related_objects.all():
+ setattr(obj, obj_varname, primary_object)
+ obj.save()
# Migrate all many to many references from alias object to primary
# object.
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index ad83b4a87..349408465 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -417,6 +417,7 @@ class MergeTest(TestCase):
name='Boule', surname=' ', history_modifier=self.user,
attached_to=self.company_1)
self.person_1.person_types.add(self.person_types[0])
+
self.author_1_pk = models.Author.objects.create(
person=self.person_1, author_type=self.author_types[0]).pk
@@ -428,6 +429,9 @@ class MergeTest(TestCase):
self.person_2 = models.Person.objects.create(
name='Bill', history_modifier=self.user, surname='Peyo',
title=self.title, attached_to=self.company_2)
+ self.user.ishtaruser.person = self.person_2
+ self.user.ishtaruser.save()
+
self.person_2.person_types.add(self.person_types[1])
self.author_2_pk = models.Author.objects.create(
person=self.person_2, author_type=self.author_types[1]).pk
@@ -443,6 +447,9 @@ class MergeTest(TestCase):
self.assertEqual(self.person_1.title, self.title)
# string field with only spaces is an empty field
self.assertEqual(self.person_1.surname, 'Peyo')
+ # preserve one to one field
+ user = User.objects.get(username='username')
+ self.assertEqual(self.person_1, user.ishtaruser.person)
# preserve existing foreign key
self.assertEqual(self.person_1.attached_to, self.company_1)
# preserve existing many to many