|
18 | 18 | from common.utils.tool_code import ToolExecutor |
19 | 19 | from maxkb.const import CONFIG |
20 | 20 | from tools.models import Tool, ToolScope, ToolFolder |
| 21 | +from tools.serializers.tool_folder import ToolFolderTreeSerializer |
21 | 22 |
|
22 | 23 | tool_executor = ToolExecutor(CONFIG.get('SANDBOX')) |
23 | 24 |
|
@@ -325,14 +326,25 @@ def get_tools(self, folder_id): |
325 | 326 | self.is_valid(raise_exception=True) |
326 | 327 | if not folder_id: |
327 | 328 | folder_id = 'root' |
328 | | - root = ToolFolder.objects.filter(id=folder_id).first() |
329 | | - if not root: |
| 329 | + # 获取当前文件夹 |
| 330 | + current_folder = ToolFolder.objects.filter(id=folder_id).first() |
| 331 | + if not current_folder: |
330 | 332 | raise serializers.ValidationError(_('Folder not found')) |
331 | | - # 使用MPTT的get_descendants()方法获取所有相关节点 |
332 | | - all_folders = root.get_descendants(include_self=True) |
333 | 333 |
|
334 | | - tools = QuerySet(Tool).filter(workspace_id=self.data.get('workspace_id'), folder_id__in=all_folders) |
335 | | - return ToolModelSerializer(tools, many=True).data |
| 334 | + # 获取当前文件夹下的直接子文件夹 |
| 335 | + child_folders = ToolFolder.objects.filter(parent=current_folder) |
| 336 | + folders_data = ToolFolderTreeSerializer(child_folders, many=True).data |
| 337 | + |
| 338 | + # 获取当前文件夹下的工具 |
| 339 | + tools = QuerySet(Tool).filter(Q(workspace_id=self.data.get('workspace_id')) & |
| 340 | + Q(folder_id=folder_id)) |
| 341 | + tools_data = ToolModelSerializer(tools, many=True).data |
| 342 | + |
| 343 | + # 返回包含文件夹和工具的结构 |
| 344 | + return { |
| 345 | + 'folders': folders_data, |
| 346 | + 'tools': tools_data, |
| 347 | + } |
336 | 348 |
|
337 | 349 | class Query(serializers.Serializer): |
338 | 350 | workspace_id = serializers.CharField(required=True, label=_('workspace id')) |
|
0 commit comments