diff options
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 |
commit | 63eb23c8336cb78df9f2efe0f4d357abfca06dc4 (patch) | |
tree | 05294b754d86467dfad7e1b0d0a741d67533e96a | |
parent | 6a5b22f314d5a0ce7eed6417f2b3120152ca5763 (diff) | |
download | Ishtar-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.py | 13 | ||||
-rw-r--r-- | ishtar_common/tests.py | 7 |
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 |