首先,因为我们安装了restframework,所以我们需要在django的settings中引入restframework

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1.apps.App1Config',
"rest_framework",
]

  

然后我们在使用cbv的方式进行多表的序列化

from rest_framework.views import APIView
class Book_cbv(APIView):
def get(self,request):
query_list = models.Book.objects.all()
bs = book_serializers(query_list,many=True) from rest_framework.response import Response
# return HttpResponse(bs.data)
return Response(bs.data)
def post(self,request):
pass

  

这里要注意,我们的cbv这次是继承的rest_framework的APIView

这里为了返回的数据好看一些,我们导入了rest_framework的Response模块

        from rest_framework.response import Response
# return HttpResponse(bs.data)
return Response(bs.data)

  

到此,我们现在和单表的序列化还是一样的,下面我们进入多表的序列化

首先看下序列化的类是怎么写的

class book_serializers(serializers.Serializer):
id = serializers.IntegerField()
book_name = serializers.CharField()
book_price = serializers.DecimalField(max_digits=5,decimal_places=2) # 一对多,关联指定的对象,然后显示指定对象的字段
book_publish = serializers.CharField(source="book_publish.id") book_auther = serializers.SerializerMethodField()
def get_book_auther(self,obj):
s = ""
for i in obj.book_auther.all():
s = s + i.auther_name + "|"
return s

  

首先看下一对多的字段,这里的意思是source这个字段代表我要显示一对多中的一表要显示的信息

    # 一对多,关联指定的对象,然后显示指定对象的字段
book_publish = serializers.CharField(source="book_publish.id")

  

最后看下多对多字段该如何处理

    book_auther = serializers.SerializerMethodField()
def get_book_auther(self,obj):
s = ""
for i in obj.book_auther.all():
s = s + i.auther_name + "|"
return s

  

重点看下我截图的位置,多对多字段要使用serializers.SerializerMethodField这个方法

下面我们来解释一下下面的函数,首先get_后面的book_auther这个就是多对多字段,传递的obj这个就是book这个model对象,多对多字段具体要显示什么,完全取决于get_book_auther这个函数的返回值

下面我们通过postman发送get请求,看下返回值

我们看到一对多字段是显示的一表中的id,多对多字段也是按照我们的函数的返回值进行显示的

至此,单表的序列化,一对多字段的序列化,多对多字段的序列化都已经完成了

Django的rest_framework的序列化组件之序列化多表字段的方法的更多相关文章

  1. Django的rest_framework的分页组件源码分析

    前言: 分页大家应该都很清楚,今天我来给大家做一下Django的rest_framework的分页组件的分析:我的讲解的思路是这样的,分别使用APIview的视图类和基于ModelViewSet的视图 ...

  2. Django之REST_framework 框架基本组件使用

    快速实例 快速实例: 点击查看官方文档 阅读推荐:点击查看 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如j ...

  3. Django的rest_framework的权限组件和频率组件源码分析

    前言: Django的rest_framework一共有三大组件,分别为认证组件:perform_authentication,权限组件:check_permissions,频率组件:check_th ...

  4. [Django REST framework - 序列化组件、source、钩子函数]

    [Django REST framework - 序列化组件.source.钩子函数] 序列化器-Serializer 什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有f ...

  5. Django序列化组件与数据批量操作与简单使用Forms组件

    目录 SweetAlert前端插件 Django自带的序列化组件 批量数据操作 分页器与推导流程 Forms组件之创建 Forms组件之数据校验 Forms组件之渲染标签 Forms组件之信息展示 S ...

  6. 解析器组件和序列化组件(GET / POST 接口设计)

    前言 我们知道,Django无法处理 application/json 协议请求的数据,即,如果用户通application/json协议发送请求数据到达Django服务器,我们通过request.P ...

  7. 【DRF框架】序列化组件

    DRF框架的序列化组件 在前后端分离的应用模式中,后端仅返回前端所需的数据,返回的数据类似是JSON,因此需要使用序列化组件进行序列化再将数据返回 使用JsonResponse做序列化 #  使用Js ...

  8. 第三章、drf框架 - 序列化组件 | Serializer

    目录 第三章.drf框架 - 序列化组件 | Serializer 序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer( ...

  9. django rest_framework 序列化组件详解

    为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...

随机推荐

  1. UI5-学习篇-13-Eclipse 开发UI5应用

    1.Eclipse环境配置及组件安装 UI5-学习篇-1-Eclipse开发工具及环境搭建 2.创建项目 3.设置代理映射 打开WebContent->WEB-INF->web.xml文件 ...

  2. rocketmq 4.2.0 版本 控制台本地搭建(史上最简单教程)

    就像发现新大陆一般,瞎折腾,搞出来了..并没有网上说的一大串....(本人公司的项目从未使用过springboot....) rocketmq  控制台,官方使用springboot 做后端,前端使用 ...

  3. git使用——分支

    创建dev分支,并切换到dev分支. git checkout -b dev //Switched to a new branch 'dev' 查看分支. git branch //* dev &qu ...

  4. PHP使用redis防止大并发下二次写入(如如何防止重复下订单)

    php调用redis进去读写操作,大并发下会出现:读取key1,没有内容则写入内容,但是大并发下会出现同时多个php进程写入的情况,这个时候需要加一个锁,即获取锁的php进程有权限写. $lock_k ...

  5. 简单步骤Centos7安装Tomcat 8 (yum安装)(ZT)

    原文:https://blog.51cto.com/bestlope/1978114?source=drt 说明: 操作系统:Centos7 系统环境:未安装其他服务 Step 1:更新系统 sudo ...

  6. [Shell]Bash基本功能:输入输出重定向

    /*----------------------------------------------------------------------------------------------- @黑 ...

  7. python opencv3 给图片加中文

    转自:https://www.cnblogs.com/arkenstone/p/6961453.html opencv3.2将中文输出到图片上 opencv自带的putText函数无法输出utf8类型 ...

  8. NFS 网络文件系统制作

    1. 构建根文件系统主要是建立相关的文件目录,以及各目录下相关的配置文件.管理工具等. 2. 首先创建文件目录. mkdir rootfs cd rootfs mkdir bin dev etc li ...

  9. 线上问题!----------org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

    1.问题出现 昨晚项目在上线的时候因为推广的原因,新增的大量请求.在八点的时候. org.apache.catalina.connector.ClientAbortException: java.io ...

  10. 2.4、CDH 搭建Hadoop在安装(Cloudera Software安装和配置MySQL)

    为Cloudera Software安装和配置MySQL 要使用MySQL数据库,请按照以下过程操作.有关MySQL数据库兼容版本的信息,请参阅CDH和Cloudera Manager支持的数据库. ...