Django的rest_framework的序列化组件之序列化多表字段的方法
首先,因为我们安装了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的序列化组件之序列化多表字段的方法的更多相关文章
- Django的rest_framework的分页组件源码分析
前言: 分页大家应该都很清楚,今天我来给大家做一下Django的rest_framework的分页组件的分析:我的讲解的思路是这样的,分别使用APIview的视图类和基于ModelViewSet的视图 ...
- Django之REST_framework 框架基本组件使用
快速实例 快速实例: 点击查看官方文档 阅读推荐:点击查看 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如j ...
- Django的rest_framework的权限组件和频率组件源码分析
前言: Django的rest_framework一共有三大组件,分别为认证组件:perform_authentication,权限组件:check_permissions,频率组件:check_th ...
- [Django REST framework - 序列化组件、source、钩子函数]
[Django REST framework - 序列化组件.source.钩子函数] 序列化器-Serializer 什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有f ...
- Django序列化组件与数据批量操作与简单使用Forms组件
目录 SweetAlert前端插件 Django自带的序列化组件 批量数据操作 分页器与推导流程 Forms组件之创建 Forms组件之数据校验 Forms组件之渲染标签 Forms组件之信息展示 S ...
- 解析器组件和序列化组件(GET / POST 接口设计)
前言 我们知道,Django无法处理 application/json 协议请求的数据,即,如果用户通application/json协议发送请求数据到达Django服务器,我们通过request.P ...
- 【DRF框架】序列化组件
DRF框架的序列化组件 在前后端分离的应用模式中,后端仅返回前端所需的数据,返回的数据类似是JSON,因此需要使用序列化组件进行序列化再将数据返回 使用JsonResponse做序列化 # 使用Js ...
- 第三章、drf框架 - 序列化组件 | Serializer
目录 第三章.drf框架 - 序列化组件 | Serializer 序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer( ...
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
随机推荐
- UI5-学习篇-13-Eclipse 开发UI5应用
1.Eclipse环境配置及组件安装 UI5-学习篇-1-Eclipse开发工具及环境搭建 2.创建项目 3.设置代理映射 打开WebContent->WEB-INF->web.xml文件 ...
- rocketmq 4.2.0 版本 控制台本地搭建(史上最简单教程)
就像发现新大陆一般,瞎折腾,搞出来了..并没有网上说的一大串....(本人公司的项目从未使用过springboot....) rocketmq 控制台,官方使用springboot 做后端,前端使用 ...
- git使用——分支
创建dev分支,并切换到dev分支. git checkout -b dev //Switched to a new branch 'dev' 查看分支. git branch //* dev &qu ...
- PHP使用redis防止大并发下二次写入(如如何防止重复下订单)
php调用redis进去读写操作,大并发下会出现:读取key1,没有内容则写入内容,但是大并发下会出现同时多个php进程写入的情况,这个时候需要加一个锁,即获取锁的php进程有权限写. $lock_k ...
- 简单步骤Centos7安装Tomcat 8 (yum安装)(ZT)
原文:https://blog.51cto.com/bestlope/1978114?source=drt 说明: 操作系统:Centos7 系统环境:未安装其他服务 Step 1:更新系统 sudo ...
- [Shell]Bash基本功能:输入输出重定向
/*----------------------------------------------------------------------------------------------- @黑 ...
- python opencv3 给图片加中文
转自:https://www.cnblogs.com/arkenstone/p/6961453.html opencv3.2将中文输出到图片上 opencv自带的putText函数无法输出utf8类型 ...
- NFS 网络文件系统制作
1. 构建根文件系统主要是建立相关的文件目录,以及各目录下相关的配置文件.管理工具等. 2. 首先创建文件目录. mkdir rootfs cd rootfs mkdir bin dev etc li ...
- 线上问题!----------org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
1.问题出现 昨晚项目在上线的时候因为推广的原因,新增的大量请求.在八点的时候. org.apache.catalina.connector.ClientAbortException: java.io ...
- 2.4、CDH 搭建Hadoop在安装(Cloudera Software安装和配置MySQL)
为Cloudera Software安装和配置MySQL 要使用MySQL数据库,请按照以下过程操作.有关MySQL数据库兼容版本的信息,请参阅CDH和Cloudera Manager支持的数据库. ...