feat: add pagination method for tools with folder data in tool.py
This commit is contained in:
parent
d7b61c61e6
commit
7780d89c55
@ -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
|
||||
}
|
||||
|
||||
@ -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]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user