Django 序列化數據之多表數據序列化


一、問題描述

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
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM