From 57bf9ca8b1c76ece6339ab328a9363ea7a6b3868 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 30 Oct 2020 13:29:23 +0800 Subject: [PATCH] =?UTF-8?q?perf(assets):=20=E4=BC=98=E5=8C=96=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=AD=90=E8=8A=82=E7=82=B9=E5=90=8D=E7=A7=B0=E7=9A=84?= =?UTF-8?q?=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/models/node.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 335d04618..e4afa7b1b 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -481,6 +481,21 @@ class Node(OrgModelMixin, SomeNodesMixin, FamilyMixin, NodeAssetsMixin): return return super().delete(using=using, keep_parents=keep_parents) + def update_child_full_value(self): + nodes = self.get_all_children(with_self=True) + sort_key_func = lambda n: [int(i) for i in n.key.split(':')] + nodes_sorted = sorted(list(nodes), key=sort_key_func) + nodes_mapper = {n.key: n for n in nodes_sorted} + for node in nodes_sorted: + parent = nodes_mapper.get(node.parent_key) + if not parent: + logger.error(f'Node parent node in mapper: {node.parent_key} {node.value}') + continue + node.full_value = parent.full_value + '/' + node.value + self.__class__.objects.bulk_update(nodes, ['full_value']) + def save(self, *args, **kwargs): self.full_value = self.computed_full_value() - return super().save(*args, **kwargs) + instance = super().save(*args, **kwargs) + self.update_child_full_value() + return instance