以前在写django 的时候,从后端拿到数据返回给前端,每个字段都要单独进行定义,有了Serializer方法,我们可以节省代码量。
首先,编写今天的models 表,并自己进行url 配置,详细参照前三篇教程。

from django.db import modelsclass UserGroup(models.Model):title = models.CharField(max_length=32)class UserInfo(models.Model):user_type_choice = ((1, '普通用户'),(2, 'VIP'),(3, 'SVIP'))user_type = models.IntegerField(choices=user_type_choice)username = models.CharField(max_length=32, unique=True)password = models.CharField(max_length=64)roles = models.ManyToManyField("Role")group = models.ForeignKey(UserGroup, on_delete=models.DO_NOTHING)class UserToken(models.Model):user = models.OneToOneField(to='UserInfo', on_delete=models.CASCADE)token = models.CharField(max_length=32)class Role(models.Model):title = models.CharField(max_length=32)

1. 返回的数据的几种方式

首先,看一下以前我们是怎么给前端传递数据的

第二种方法, 使用Serializer 方法简单的对QuerySet进行封装

只返回一个结果:

2. Serializer 的用法


user_type 刚才设置的是可选项,加入到展示字段之后,发现并不能显示出来。

给字段更改名字。

根据字段的选择,显示选择对应的数据

显示数据表外键对应的字段信息

上面的字段都是一一对应或者一对多的关系,假如是多对多,即ManyToMany ,则不能继续使用source 的方法,而是得换一个方法。我们在前面设置的时候,设置的用户表跟角色表是多对多的关系,我们可以用此来进行测试。

在我们自定义之后,可以显示出我们自己定义的类型信息,但是该字段是写死的,而我们在设置表的时候,每个用户可以对应多个角色,应该是不同的。

现在我们可以进行总结:假如我们要对某个字段进行传递给前端,我们可以首先进行序列化,序列化的类要继承serializer 方法,编写要展示的字段,使用source 找到想要的字段。可以用get_display 方法实现choice选择的展示,也可以自己定义方法进行展示。

3. Serializer 其他用法

上面我们要将展示的字段一一列举出来,我们可以有更简单的用法,这次继承的类不一样

我们也可以只让显示我们需要的字段信息,同样的,根据上面的用法,我们也可以自定义多对多的显示信息。


4. 总结:

写类的序列化的时候,可以有两种继承方式
  1. serializers.Serializer : 要将每个展示的字段都要写出来
  2. serializers.ModelSerializer: 通过model 和 fields 可以将所有的字段展示,也可展示自定义的

字段定义信息:

  1. 可以使用source 进行指定
  2. xxx = serializers.SerializerMethodField() 可以自定义,通过函数get_xxx 进行自定义

今天就暂时写到这里,明天再写最后一节。

Django restframework中 Serializer 序列化方法详细介绍相关推荐

  1. Selenium中元素定位方法详细介绍

    一.元素定位基本方法 1.如何进行元素定位? 元素:由标签头 + 标签尾 + 标签头和标签尾包括的文本内容: 元素的信息就是指元素的标签名及元素的属性: 元素的层级结构就是指元素之间相互嵌套的层级结构 ...

  2. python流程控制语句-Python中流程控制语句的详细介绍

    除了刚才介绍的while语句之外,Python也从其他语言借鉴了其他流程控制语句,并做了相应改变.Python中流程控制语句的详细介绍 4.1 ifStatements 或许最广为人知的语句就是if语 ...

  3. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  4. C#语言中的重要知识详细介绍

    微软的.NET推出后,关于C#的有关文章也相继出现,作为微软的重要的与JAVA抗衡的语言,C#具有很多优点.本文将选一些C#语言中的重要知识详细介绍: 第一章:参数 1.1 IN 参数 c#种的四种参 ...

  5. 怎么使用小爱同学音响_小爱音箱mini怎么样如何使用 小爱音箱mini使用方法详细介绍...

    小爱音箱mini怎么样如何使用?相信小伙伴们一定很好奇,小米音响mini首发仅需99元,下面小编为大家带来了小爱音箱mini使用方法详细介绍,感兴趣的小伙伴赶紧跟着小编一起来看看吧. 小爱音箱mini ...

  6. Mac 系统中各个文件夹详细介绍

    Mac 系统中各个文件夹详细介绍 Mac OS X 系统以Unix作为核心,根目录为 / 打开Macintosh HD你会发现内中有四个文件夹分别为:应用程序(Applications).系统(Sys ...

  7. python定义数组的方法_Python数组定义方法详细介绍

    本文实例讲述了Python数组定义方法.分享给大家供大家参考,具体如下: Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]= ...

  8. CreateFile函数使用方法详细介绍

    CreateFile The CreateFile function creates or opens the following objects and returns a handle that ...

  9. 经典IDEF系统分析方法详细介绍

    经典IDEF系统分析方法详细介绍 (转载) IDEF是ICAM DEFinition method 的缩写,是美国空军在70年代末80年代初ICAM(Integrated Computer Aided ...

最新文章

  1. c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解
  2. Linux内存中的 buffer 和 cache 到底是个什么东东?
  3. python ctime函数_Python中的ctime()方法使用教程
  4. 多普勒效应及多普勒频移的简单推导
  5. ASP.NET Core 十种方式扩展你的 Views
  6. [luoguP2760] 科技庄园(背包DP)
  7. Android自动化测试探索
  8. 快手公司厕所装坑位计时器,网友:再也不能带薪拉屎了!
  9. 切换python执行版本
  10. ApacheCN 深度学习译文集 20201229 更新
  11. vue echarts动态数据定时刷新
  12. postgresql表空间迁移
  13. Java二进制的符号位在哪一位_Java位运算符及二进制常识
  14. Ubuntu18.04安装TPlink WDN5200 usb无线网卡驱动
  15. Mybatis OGNL表达式报错
  16. 假脱机技术——实现独占设备变成共享设备
  17. 皕杰报表里的排序问题
  18. day75,爬虫02,webmagic入门程序,组件介绍:Downloader,PageProcess,pipeline,Scheduler,51jop招聘网站综合案例
  19. 头歌C++面向对象 - 类的多态性与虚函数
  20. kali安装水泽,进行简单换源

热门文章

  1. 小马2K3PE永久珍藏版|
  2. impala 源码级别优化
  3. eyoucms自媒体新闻资讯类网站模板
  4. 程序员自己的定位以及怪物追踪寻路AI (转)
  5. 2023年美国大学生数学建模时间、分析及算法代码
  6. html文本标签练习
  7. asp前端日历_asp日历-和asp日历相关的内容-阿里云开发者社区
  8. Android屏幕适配 px,dp,dpi及density的关系与深入理解(转载)
  9. 考研数学 概率论争议题 [Python验证版]
  10. mysql还原.bak文件_mysql还原bak文件