一、問題描述
1.將查詢后的多張表的數據做序列化操作; 2.為什么要做三張表的序列化操作,因為三張表的字段有些相同有些不同; 3.將三張表序列化后的數據進行合並; 4.之后將合並后的序列化操作實現分頁查詢操作;
二、功能邏輯
data = {"code": 0, "msg": "", "result": {"data": []}} Group1Qeryset = models.Group1.objects.all() Group2Qeryset = models.Group2.objects.all() Group3Qeryset = models.Group3.objects.all() ### 序列化操作 Group1Res = iam_serializer.GetListGroup1Serializer(Group1Qeryset, many=True) Group2Res = iam_serializer.GetListGroup2Serializer(Group2Qeryset, many=True) Group3Res = iam_serializer.GetListGroup3Serializer(Group3Qeryset, many=True) dataAll = chain(Group1Res.data, Group2Res.data, Group3Res.data) dataList = [dataObj for dataObj in dataAll] #### 重新將chian數據類型轉換成list類型 #### 分頁功能 pageResp = pagefunc(data=dataList, currentPage=currentPage, pageSzie=pageSize) data['result']['data'] = pageResp['data'] data['result']['pageBean'] = pageResp['pageBean'] data['msg'] = '查詢成功'
三、分頁功能
### django自帶的分頁模塊 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def pagefunc(data,currentPage,pageSzie,): pageSize = int(pageSzie) # 設置每頁顯示條數 dataDict = {'data': [], 'pageBean': {}} # 生成分頁實例 paginator = Paginator(data, pageSize) # 獲取數據總條數 dataDict['pageBean']['totalElements'] = paginator.count # 每頁顯示條數 dataDict['pageBean']['pageSize'] = pageSize # 總共頁數 dataDict['pageBean']['totalPageNum'] = paginator.num_pages # 獲取指定頁碼的數據 try: data = paginator.page(currentPage) except PageNotAnInteger: data = paginator.page(1) except EmptyPage: data = paginator.page(paginator.num_pages) # 當前多少頁 dataDict['pageBean']['currentPage'] = data.number dataDict['data'] = data.object_list return dataDict
四、實際接口請求
1 請求方式:GET 2 http://127.0.0.1/xxxx/groups?currentPage=1&pageSize=2
{ "code": 0, "msg": "查詢成功", "result": { "data": [ { "id": "f824fb1c-61cf-11ea-ab07-7247fc734bb9", "group_name": "xxx組", "users_count": 1, "permissions": "", "remark": "該組為xxx用戶組,擁有所有權限", "create_time": "2020-03-09T00:00:00Z", "updata_time": "2020-03-09T00:00:00Z", "state": true, "tag": "ixxxxin", "type": 1 }, { "id": "20927ecd-6766-11ea-a01c-6fa3f814f5eb", "group_name": "xxx平台部", "users_count": 1, "permissions": "", "remark": "xxxx平台部", "create_time": "2020-03-16T09:14:24.452957Z", "updata_time": "2020-03-16T09:14:24.452957Z", "state": true, "tag": "", "type": 1 } ], "pageBean": { "totalElements": 20, "pageSize": 2, "totalPageNum": 10, "currentPage": 1 } } }