diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py index c756e9efd..a8164cd13 100644 --- a/apps/assets/api/node.py +++ b/apps/assets/api/node.py @@ -71,8 +71,8 @@ class NodeViewSet(OrgModelViewSet): if node.is_org_root(): error = _("You can't delete the root node ({})".format(node.value)) return Response(data={'error': error}, status=status.HTTP_403_FORBIDDEN) - if node.has_children_or_has_assets(): - error = _("Deletion failed and the node contains children or assets") + if node.has_offspring_assets(): + error = _("Deletion failed and the node contains assets") return Response(data={'error': error}, status=status.HTTP_403_FORBIDDEN) return super().destroy(request, *args, **kwargs) diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py index 973df4b4a..2e3b890a5 100644 --- a/apps/assets/models/node.py +++ b/apps/assets/models/node.py @@ -38,8 +38,7 @@ def compute_parent_key(key): class NodeQuerySet(models.QuerySet): - def delete(self): - raise NotImplementedError + pass class FamilyMixin: @@ -622,14 +621,14 @@ class Node(OrgModelMixin, SomeNodesMixin, FamilyMixin, NodeAssetsMixin): tree_node = TreeNode(**data) return tree_node - def has_children_or_has_assets(self): - if self.children or self.get_assets().exists(): - return True - return False + def has_offspring_assets(self): + # 拥有后代资产 + return self.get_all_assets().exists() def delete(self, using=None, keep_parents=False): - if self.has_children_or_has_assets(): + if self.has_offspring_assets(): return + self.all_children.delete() return super().delete(using=using, keep_parents=keep_parents) def update_child_full_value(self):