diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-08-31 18:11:40 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-02-28 12:15:20 +0100 |
commit | 735be2a425636b7dc49f71c650e1765a527a3e97 (patch) | |
tree | 26d1d9321680b94b0d2cb66209f4eb5cc2c56227 | |
parent | dcd1225cef0fc3e573a11cec651e16f2b35b83cf (diff) | |
download | Ishtar-735be2a425636b7dc49f71c650e1765a527a3e97.tar.bz2 Ishtar-735be2a425636b7dc49f71c650e1765a527a3e97.zip |
Containers: append warehouse to merge key (refs #4964)
-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, |