|
8 | 8 |
|
9 | 9 | from common.constants.permission_constants import Group |
10 | 10 | from folders.api.folder import FolderCreateRequest |
11 | | -from knowledge.models import KnowledgeFolder |
| 11 | +from knowledge.models import KnowledgeFolder, Knowledge |
12 | 12 | from knowledge.serializers.knowledge_folder import KnowledgeFolderTreeSerializer |
13 | | -from tools.models import ToolFolder |
| 13 | +from tools.models import ToolFolder, Tool |
14 | 14 | from tools.serializers.tool_folder import ToolFolderTreeSerializer |
15 | 15 |
|
16 | 16 |
|
| 17 | +def get_source_type(source): |
| 18 | + if source == Group.TOOL.name: |
| 19 | + return Tool |
| 20 | + elif source == Group.APPLICATION.name: |
| 21 | + # todo app folder |
| 22 | + return None |
| 23 | + elif source == Group.KNOWLEDGE.name: |
| 24 | + return Knowledge |
| 25 | + else: |
| 26 | + return None |
| 27 | + |
| 28 | + |
17 | 29 | def get_folder_type(source): |
18 | 30 | if source == Group.TOOL.name: |
19 | 31 | return ToolFolder |
@@ -154,12 +166,20 @@ def one(self): |
154 | 166 | folder = QuerySet(Folder).filter(id=self.data.get('id')).first() |
155 | 167 | return FolderSerializer(folder).data |
156 | 168 |
|
| 169 | + @transaction.atomic |
157 | 170 | def delete(self): |
158 | 171 | self.is_valid(raise_exception=True) |
159 | 172 | if self.data.get('id') == 'root': |
160 | 173 | raise serializers.ValidationError(_('Cannot delete root folder')) |
161 | 174 | Folder = get_folder_type(self.data.get('source')) # noqa |
162 | | - QuerySet(Folder).filter(id=self.data.get('id')).delete() |
| 175 | + Source = get_source_type(self.data.get('source')) # noqa |
| 176 | + nodes = Folder.objects.filter(id=self.data.get('id')).get_descendants(include_self=True) |
| 177 | + for node in nodes: |
| 178 | + # print(node) |
| 179 | + # 删除相关的资源 |
| 180 | + Source.objects.filter(folder_id=node.id).delete() |
| 181 | + # 删除节点 |
| 182 | + node.delete() |
163 | 183 |
|
164 | 184 |
|
165 | 185 | class FolderTreeSerializer(serializers.Serializer): |
|
0 commit comments