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'))
|
name = serializers.CharField(required=False, allow_null=True, allow_blank=True, label=_('tool name'))
|
||||||
tool_type = serializers.CharField(required=True, label=_('tool type'))
|
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)
|
self.is_valid(raise_exception=True)
|
||||||
|
|
||||||
folder_id = self.data.get('folder_id', 'root')
|
folder_id = self.data.get('folder_id', 'root')
|
||||||
@ -414,3 +414,28 @@ class ToolTreeSerializer(serializers.Serializer):
|
|||||||
Q(folder_id__in=all_folders) &
|
Q(folder_id__in=all_folders) &
|
||||||
Q(tool_type=self.data.get('tool_type')))
|
Q(tool_type=self.data.get('tool_type')))
|
||||||
return page_search(current_page, page_size, tools, lambda record: ToolModelSerializer(record).data)
|
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'),
|
'name': request.query_params.get('name'),
|
||||||
'tool_type': request.query_params.get('tool_type'),
|
'tool_type': request.query_params.get('tool_type'),
|
||||||
}
|
}
|
||||||
).page(current_page, page_size))
|
).page_tool_with_folders(current_page, page_size))
|
||||||
|
|
||||||
class Import(APIView):
|
class Import(APIView):
|
||||||
authentication_classes = [TokenAuth]
|
authentication_classes = [TokenAuth]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user