mirror of https://github.com/jumpserver/jumpserver
perf: 可以删除包含子孙节点但不包含子孙资产的节点
parent
5e5cd80bc2
commit
fea0170c5e
|
@ -71,8 +71,8 @@ class NodeViewSet(OrgModelViewSet):
|
||||||
if node.is_org_root():
|
if node.is_org_root():
|
||||||
error = _("You can't delete the root node ({})".format(node.value))
|
error = _("You can't delete the root node ({})".format(node.value))
|
||||||
return Response(data={'error': error}, status=status.HTTP_403_FORBIDDEN)
|
return Response(data={'error': error}, status=status.HTTP_403_FORBIDDEN)
|
||||||
if node.has_children_or_has_assets():
|
if node.has_offspring_assets():
|
||||||
error = _("Deletion failed and the node contains children or assets")
|
error = _("Deletion failed and the node contains assets")
|
||||||
return Response(data={'error': error}, status=status.HTTP_403_FORBIDDEN)
|
return Response(data={'error': error}, status=status.HTTP_403_FORBIDDEN)
|
||||||
return super().destroy(request, *args, **kwargs)
|
return super().destroy(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,7 @@ def compute_parent_key(key):
|
||||||
|
|
||||||
|
|
||||||
class NodeQuerySet(models.QuerySet):
|
class NodeQuerySet(models.QuerySet):
|
||||||
def delete(self):
|
pass
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
|
||||||
class FamilyMixin:
|
class FamilyMixin:
|
||||||
|
@ -622,14 +621,14 @@ class Node(OrgModelMixin, SomeNodesMixin, FamilyMixin, NodeAssetsMixin):
|
||||||
tree_node = TreeNode(**data)
|
tree_node = TreeNode(**data)
|
||||||
return tree_node
|
return tree_node
|
||||||
|
|
||||||
def has_children_or_has_assets(self):
|
def has_offspring_assets(self):
|
||||||
if self.children or self.get_assets().exists():
|
# 拥有后代资产
|
||||||
return True
|
return self.get_all_assets().exists()
|
||||||
return False
|
|
||||||
|
|
||||||
def delete(self, using=None, keep_parents=False):
|
def delete(self, using=None, keep_parents=False):
|
||||||
if self.has_children_or_has_assets():
|
if self.has_offspring_assets():
|
||||||
return
|
return
|
||||||
|
self.all_children.delete()
|
||||||
return super().delete(using=using, keep_parents=keep_parents)
|
return super().delete(using=using, keep_parents=keep_parents)
|
||||||
|
|
||||||
def update_child_full_value(self):
|
def update_child_full_value(self):
|
||||||
|
|
Loading…
Reference in New Issue