首先,因为我们安装了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. virtual安装linux

    virtual直接在官网上下载即可. 下载iso的镜像文件.新建 ->设置创建 redhat 根据镜像文件选择需要创建的版本. 创建后运行,如果出现一直黑屏,需要查看电脑支持虚拟是否启动. 右C ...

  2. springboot 停止

    因springboot内嵌tomcat或jetty使得我们没法去操作服务: 因此,常常是服务起来后,要重启时会端口占用,我们只能无情的kill掉端口. 不过spring也设置有配置停止的请求: App ...

  3. 采用EntityFramework.Extended 对EF进行扩展

    今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这是一个对Entity Framework进行扩展的类库 ...

  4. 尚硅谷redis学习7-持久化AOF

    AOF比RDB优点在于数据的实时性高,经过设置后最多只会损失一秒钟的数据,而RDB最多可能损失上次备份到此次DOWM机间的数据 原理 配置文件 设置同步频率 重启redis,测试,可以看到数据在关机重 ...

  5. C++复习:异常

    异常处理机制专题 前言 1)异常是一种程序控制机制,与函数机制独立和互补     函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作 ...

  6. Eclipse实用操作

    1.缩进:Tab 2.退格:Shift+Tab 3.包结构展开方式:Package Presentation 4.快速定位文件:按ctrl键不放,鼠标移至链接处 5.为属性快速生成相应的get和set ...

  7. Homebrew安装与使用

    Homebrew是什么? 官方解释: Homebrew是以最简单,最灵活的方式来安装苹果公司在MacOS中不包含的UNIX工具. 官网:传送门 Git仓库地址:传送门 Homebrew 怎么安装 ?怎 ...

  8. python __dict__

    dict 以key-value 的形式存储着本对类/模块的: 模块的__dict__ 属性: 存储了模块的 name (这个也是模块的一个单独的键,即:在Bx.py 中引入Ax.py 那么,在Bx中, ...

  9. scala private

    class Person private(val name:String) private 修饰整个类的参数,其实效果类似于java的私有化构造方法,无法通过new Person(..) 来实例化对象 ...

  10. 自定义 mapper的实现

    json格式,要想好看直接百度,json,将字符放进去就可 一步:将mapper复制一份,名字加一个Custom自定义 二步:mpper.xml也是一样,设置里面的namespace映射关系 自定义m ...