diff options
-rw-r--r-- | archaeological_warehouse/models.py | 7 | ||||
-rw-r--r-- | archaeological_warehouse/tests.py | 12 | ||||
-rw-r--r-- | ishtar_common/models.py | 7 |
3 files changed, 19 insertions, 7 deletions
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 17719539b..d24985645 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -447,7 +447,6 @@ class WarehouseDivisionLink(models.Model): return self.warehouse.uuid, self.container_type.txt_idx - class ContainerTree(models.Model): CREATE_SQL = """ CREATE VIEW containers_tree AS @@ -765,7 +764,7 @@ class Container(DocumentItem, Merge, LightHistorizedItem, QRCodeItem, GeoItem, verbose_name=_("Main image"), blank=True, null=True) DISABLE_POLYGONS = False - MERGE_ATTRIBUTE = "get_cached_division" + MERGE_ATTRIBUTE = "get_merge_key" MERGE_STRING_FIELDS = ["old_reference"] class Meta: @@ -818,6 +817,10 @@ class Container(DocumentItem, Merge, LightHistorizedItem, QRCodeItem, GeoItem, def get_cached_division(self): return self._generate_cached_division() + @property + def get_merge_key(self): + return str(self.location.uuid) + "|" + self._generate_cached_division() + def _generate_cached_division(self): parents = [] parent = self.parent diff --git a/archaeological_warehouse/tests.py b/archaeological_warehouse/tests.py index 126cc0420..c1d2e032f 100644 --- a/archaeological_warehouse/tests.py +++ b/archaeological_warehouse/tests.py @@ -707,7 +707,7 @@ class ContainerTest(FindInit, TestCase): location=self.main_warehouse, container_type=ct) init_mc = container_1.merge_candidate.count() - models.Container.objects.create( + container_2 = models.Container.objects.create( reference="TEST", responsible=self.main_warehouse, location=self.main_warehouse, container_type=ct) @@ -716,6 +716,16 @@ class ContainerTest(FindInit, TestCase): container_1.archive() self.assertEqual(container_1.merge_candidate.count(), init_mc) + container_1 = models.Container.objects.get(pk=container_1.pk) + container_1.archived = False + container_1.save() + container_2 = models.Container.objects.get(pk=container_2.pk) + self.assertEqual(container_1.merge_candidate.count(), + init_mc + 1) + container_2.location = self.alt_warehouse + container_2.save() + self.assertEqual(container_1.merge_candidate.count(), + init_mc) def test_merge_container(self): ct = models.ContainerType.objects.all()[0] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 08ae93fa6..04ed6d6c0 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -4278,16 +4278,15 @@ class Merge(models.Model): self.generate_merge_key() item = super(Merge, self).save(*args, **kwargs) if not merge_key_generated: + self.merge_candidate.clear() self.generate_merge_candidate() return item def archive(self): self.archived = True self.save() - for m in self.merge_candidate.all(): - m.delete() - for m in self.merge_exclusion.all(): - m.delete() + self.merge_candidate.clear() + self.merge_exclusion.clear() def merge(self, item, keep_old=False, exclude_fields=None): merge_model_objects(self, item, keep_old=keep_old, |