diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-03-24 19:04:54 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-02-28 12:15:20 +0100 |
commit | 2d7a40f22bc9da10515330becff08c589012c0ba (patch) | |
tree | 75e1154c53fa775498c3fb91d70c6a7f7a6d59f1 /archaeological_warehouse/models.py | |
parent | d357a8d182d9eb7b3df67d9eb9e127d83bb952fe (diff) | |
download | Ishtar-2d7a40f22bc9da10515330becff08c589012c0ba.tar.bz2 Ishtar-2d7a40f22bc9da10515330becff08c589012c0ba.zip |
Container: add parents - localisation refactoring
Diffstat (limited to 'archaeological_warehouse/models.py')
-rw-r--r-- | archaeological_warehouse/models.py | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index 7b98a385a..839ca1a6e 100644 --- a/archaeological_warehouse/models.py +++ b/archaeological_warehouse/models.py @@ -653,6 +653,9 @@ class Container(DocumentItem, LightHistorizedItem, QRCodeItem, GeoItem, null=True, blank=True, db_index=True) cached_division = models.TextField(_(u"Cached division"), null=True, blank=True, db_index=True) + parent = models.ForeignKey("Container", verbose_name=_("Parent container"), + on_delete=models.SET_NULL, + blank=True, null=True) index = models.IntegerField(u"Container ID", default=0) old_reference = models.TextField(_(u"Old reference"), blank=True, null=True) external_id = models.TextField(_(u"External ID"), blank=True, null=True) @@ -695,16 +698,24 @@ class Container(DocumentItem, LightHistorizedItem, QRCodeItem, GeoItem, def _generate_cached_location(self): items = [self.location.name, str(self.index)] - cached_label = u" - ".join(items) + cached_label = " - ".join(items) return cached_label def _generate_cached_division(self): + parents = [] + parent = self.parent + c_ids = [] + while parent: + if parent.id in c_ids: # prevent cyclic + break + c_ids.append(parent.id) + parents.append(parent) + parent = parent.parent locas = [ - u"{} {}".format(loca.division.division, loca.reference) - for loca in ContainerLocalisation.objects.filter( - container=self) + "{} {}".format(loca.container_type.name, loca.reference) + for loca in reversed(parents) ] - return u" | ".join(locas) + return " | ".join(locas) def _get_base_image_path(self): return self.responsible._get_base_image_path() + u"/" + self.external_id |