码迷,mamicode.com
首页 > 其他好文 > 详细

Django 序列化数据之多表数据序列化

时间:2020-03-25 16:08:44      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:mode   tor   count   查询   ali   obj   imp   多少   enum   

一、问题描述

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

 

Django 序列化数据之多表数据序列化

标签:mode   tor   count   查询   ali   obj   imp   多少   enum   

原文地址:https://www.cnblogs.com/supery007/p/12566781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!