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

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

时间: 2024-11-08 22:54:05

Django 序列化数据之多表数据序列化的相关文章

oracle 误删除数据,回退表数据

select * from sh_gonghuo_renyuan as of timestamp to_timestamp('2017-11-17 16:00:00','yyyy-mm-dd hh24:mi:ss'); --3.恢复删除且已提交的数据 alter table sh_gonghuo_renyuan enable row movement; --flashback table sh_gonghuo_renyuan to timestamp to_timestamp('2017-11-

oracle数据向历史表数据迁移————procedure

create or replace procedure remove_refund_his_pro isbegin declare cursor refund_query_cur is select rowid from ucmp_realtime_refund_query t1 where t1.apply_tm<= TRUNC(ADD_MONTHS(SYSDATE, -3),'DD') AND ROWNUM <= '100000000'; TYPE rowid_table_type is

SQL Server 的表数据简单操作

--表数据操作----添加表数据----向现有表添加数据--[use 要操作数据表的数据库名称go]insert [into] 数据表 [(字段名1,字段名2,字段名3, ...)] values(值1,值2,值3, ...) 例:use 商品管理数据库goinsert 客户信息表(客户姓名,客户编号,联系电话)values('刘培群','021','13927112594') --把查询到的表数据生成(添加到)一张新数据表--[use 要操作数据表的数据库名称go]select 字段名列表 i

mysql从一个表提取数据更新另外一个表(修复表数据的不一致)

目前碰到一个数据不一致的情况,有两张表,一张项目表,一张项目成员表,项目表有个字段是项目工作时间,是项目成员的工作时间汇总.是由于该了逻辑,所以要把数据改成一致. 项目表的大致结构如下. 表名:project 项目成员表大致结构如下. 表名:projectMember projectMember表的PID和project的Id关联,project_WorkTime是member_WorkTime的和. 往project表插三条数据. projectMember表数据如下: sql语句如下: UP

oracle 两表数据对比---minus

    1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等等. 本文主要讨论利用ORACLE的MINUS函数,直接实现两个记录集的比较. 2 实现步骤 假设两个记录集分别以表的方式存在,原始表为A,产生的比较表为B. 2.1 判断原始表和比较表的增量差异 利用MINUS函数,判断原始表与比较表的增量差异. 此增量数据包含两部分: 1)原始表A有.比

MySQL DDL操作--------指定表数据文件存放目录最佳实战

1. 背景 * 在MYSQL中建立一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm文件跟数据库存储引擎无关,也就是任何存储引擎的数据表都必须有.frm文件,命名方式为数据表名.frm,如user.frm. .frm文件可以用来在数据库崩溃时恢复表结构. * MySQL文件包括MySQL所建数据库文件和MySQL所用引擎创建的数据库文件. * .frm 文件与操作系统和数据库引擎无关,都有这么

表单序列化以及后台表单数据参数的提取

(该资料是楼主复习时所用,很浅显,如果有哪些地方不正确,欢迎大家留言指出) 提交表单的时候,一个表单可能会有多个参数,为了将这些参数传到后台,有两种方法: (1)通过表单id一个一个地将表单输入栏的value值取出,然后通过key:value的形式传到后台,在后台用requeset.getparameter(key), 当表单参数很多时,传入的过程很麻烦,传到后台后,对相应对象赋值也极为麻烦 (2)将表单整个序列化,打包成一个拥有多个key:value的集合,在后台用request.getpar

大数据理论体系总结--数据仓库管理与全链路数据体系

前言 就这样,大数据领域蓬勃发展了好几年,有很多伙伴执迷于技术,成为了分布式计算与存储的领域专家.也有很多伙伴执迷于数据,成为了行业的数据研发专家.当然还有很多小伙伴,热衷于工具系统开发,成为了数据技术专家.那么我们回过头来考虑,什么是大数据,什么又是数据仓库,什么又是数据技术.大数据其实是个非常笼统的感念,它是由数据仓库演化而来的数据与技术方法论,那么我们先说一下数据仓库的由来: 早在多年以前在Hadoop.Spark.Storm.Kafka等系列分布式计算与存储.消息中间件还没有成熟的时候,

将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)

表单序列化类型的数据是指url传递的数据的格式,形如"key=value&key=value&key=value"这样的key/value的键值对.一般来说使用jQuery的$.fn.serialize函数能达到这样的效果.如何将这样的格式转化为对象? 我们知道使用jQuery的$.fn.serializeArray函数得到的是一个如下结构的对象 [ { name: "startTime" value: "2015-12-02 00:00: