diff options
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 |