diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-04-07 20:42:37 +0200 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-04-15 17:05:17 +0200 |
| commit | c99101889c140c1cb60e6a416a8d238379fa5245 (patch) | |
| tree | 4bc1929b50307d3351206b1647167a5a1f520b96 | |
| parent | 06605ee2d7066b4ae73402d336b2e4e54a4d7802 (diff) | |
| download | Ishtar-c99101889c140c1cb60e6a416a8d238379fa5245.tar.bz2 Ishtar-c99101889c140c1cb60e6a416a8d238379fa5245.zip | |
⚡ hierarchical type: improve full label
| -rw-r--r-- | ishtar_common/models_common.py | 31 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 3 |
2 files changed, 26 insertions, 8 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 0161aadad..4b0f1b160 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -803,14 +803,29 @@ class HierarchicalType(GeneralType): has_full_label = True def full_label(self): - lbls = [self.label] - item = self - parents = [self.pk] # prevent loop - while item.parent and item.parent_id not in parents: - parents.append(item.parent_id) - item = item.parent - lbls.append(item.label) - return " > ".join(reversed(lbls)) + return " > ".join(reversed(self.get_label_hierarchy())) + + def _get_label_hierarchy(self, labels, pk, parents): + if not pk or pk in parents: + return labels + parents.add(pk) + q = self.__class__.objects.filter(pk=pk) + label, parent_id = q.values_list("label", "parent_id").all()[0] + labels.append(label) + self._get_label_hierarchy(labels, parent_id, parents) + return labels + + def get_label_hierarchy(self, lower=False): + """ + Get every upward labels of the hierarchy for full label or + cached hierarchical search. + Returned in reversed order. + """ + parents = set((self.pk,)) # prevent loop + result = self._get_label_hierarchy([self.label], self.parent_id, parents) + if lower: + result = list(map(str.lower, result)) + return result @property def first_parent(self): diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 94f8489ed..405920dd9 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -2542,6 +2542,8 @@ def get_item( copy(relation_types_prefix) if relation_types_prefix else {} ) + # n_start = datetime.datetime.now() + geo_import_key = dct.get("geo_import_key", None) geo_type = dct.get("geo_type", None) @@ -3282,6 +3284,7 @@ def get_item( else: new_rows[idx] = row rows = [row for __, row in new_rows.items()] + # print("full", datetime.datetime.now() - n_start) if full == "shortcut": data = json.dumps(rows) else: |
