perf(assets): 优化更新子节点名称的算法

pull/4896/head
ibuler 2020-10-30 13:29:23 +08:00 committed by Jiangjie.Bai
parent ddc2d1106b
commit 57bf9ca8b1
1 changed files with 16 additions and 1 deletions

View File

@ -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