feat: add pagination method for tools with folder data in tool.py

This commit is contained in:
CaptainB 2025-05-15 10:39:50 +08:00
parent d7b61c61e6
commit 7780d89c55
2 changed files with 27 additions and 2 deletions

View File

@ -394,7 +394,7 @@ class ToolTreeSerializer(serializers.Serializer):
name = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_('tool name'))
tool_type = serializers.CharField(required=True, label=_('tool type'))
def page(self, current_page: int, page_size: int):
def page_tool(self, current_page: int, page_size: int):
self.is_valid(raise_exception=True)
folder_id = self.data.get('folder_id', 'root')
@ -414,3 +414,28 @@ class ToolTreeSerializer(serializers.Serializer):
Q(folder_id__in=all_folders) &
Q(tool_type=self.data.get('tool_type')))
return page_search(current_page, page_size, tools, lambda record: ToolModelSerializer(record).data)
def page_tool_with_folders(self, current_page: int, page_size: int):
self.is_valid(raise_exception=True)
folder_id = self.data.get('folder_id', 'root')
root = ToolFolder.objects.filter(id=folder_id).first()
if not root:
raise serializers.ValidationError(_('Folder not found'))
# 获取当前文件夹下的直接子文件夹
child_folders = ToolFolder.objects.filter(parent=root)
folders_data = ToolFolderFlatSerializer(child_folders, many=True).data
if self.data.get('name'):
tools = QuerySet(Tool).filter(Q(workspace_id=self.data.get('workspace_id')) &
Q(folder_id=root) &
Q(tool_type=self.data.get('tool_type')) &
Q(name__contains=self.data.get('name')))
else:
tools = QuerySet(Tool).filter(Q(workspace_id=self.data.get('workspace_id')) &
Q(folder_id=root) &
Q(tool_type=self.data.get('tool_type')))
return {
'tools': page_search(current_page, page_size, tools, lambda record: ToolModelSerializer(record).data),
'folders': folders_data
}

View File

@ -135,7 +135,7 @@ class ToolView(APIView):
'name': request.query_params.get('name'),
'tool_type': request.query_params.get('tool_type'),
}
).page(current_page, page_size))
).page_tool_with_folders(current_page, page_size))
class Import(APIView):
authentication_classes = [TokenAuth]