【Django drf】序列化器总结
序列化器字段
序列化中的字段可以根据用途分为三种:
既用于序列化,也用于反序列化
普通字段只用于序列化 (读) (read_only)
外键字段只用于反序列化 (写) (write_only)
外键字段

外键字段自定义序列化
由于普通字段比较简单,以下针对外键字段进行总结:
序列化:
模型表 ----> 序列化类 ----> 前端
自定义序列化通常使用于外键字段,因为这些字段无法直接跟数据关联,如果在序列化器中直接填写外键字段前端会出现如下现象:

自定义序列化是为了给前端返回json格式字符串,而想要自定义序列化有两种方法:
在模型类中写方法
- 在模型类中写方法
数据库查询到数据 ---> 执行模型类中方法 --返回值--> 序列化类中字段 --序列化-> 前端
如果模型类中方法返回一个字典 ,在序列化类中使用DictField序列化。
如果模型类中方法返回一个列表 ,在序列化类中使用ListField序列化。

在序列化类中写方法
- 在序列化类中写方法,配合SerializerMethodField字段
SerializerMethodField:
这是一个只读字段。
它通过调用附加到的序列化程序类上的方法来获取其值。
它可用于将任何类型的数据添加到对象的序列化表示中。
数据库查询到数据 ---> 执行SerializerMethodField() ---> 执行序列化类中方法 --返回值--> json.dumps --序列化-> 前端

反序列化
模型表 <---- 序列化类 <---- 前端
外键字段反序列化保存
模型表 <-- 序列化类中create、updata等方法-- 序列化类中字段 <--主键-- 前端

ModelSerializer使用总结
# 如何使用
1 定义一个类继承ModelSerializer
2 类内部写内部内 class Meta:
3 在内部类中指定model
填写要序列化的表
4 在内部类中指定fields
写要序列化的字段,写__all__表示所有,__all__不包含方法,如果要包含方法必须要在列表中写一个个字段。
示例:['字段1','字段2'...]
5 在内部类中指定extra_kwargs,给字段添加字段参数的
因为有些字段是从模型类映射过来的,在序列化类中没有这个字段,所以需要使用extra_kwargs添加字段参数。
6 在序列化类中,可以重写某个字段,优先使用你重写的
name = serializers.SerializerMethodField()
def get_name(self, obj):
return 'sb---' + obj.name
7 以后不需要重写create和update了
-ModelSerializer写好了,兼容性更好,任意表都可以直接存(考虑了外键关联)
-当有特殊需求的情况下,也可以重写
# 在modelserialzer中写其他模型表字段
此时需要在modelserialzer类中重写create方法,因为modelserialzer内部的create只会对序列化类中指定的模型类进行操作,而不会对指定之外的类进行操作。
【Django drf】序列化器总结的更多相关文章
- drf序列化器serializers.SerializerMethodField()的用法
问题描述: 为什么DRF中有时候返回的json中图片是带域名的,有时候是不带域名的呢? 解析: 带域名的结果是在view中对模型类序列化的,DRF在序列化图片的时候 会检查上下文有没有request, ...
- drf序列化器的实例
应用目录结构: views.py from django.shortcuts import render # Create your views here. from django.views imp ...
- DRF序列化器
序列化器-Serializer 作用: 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 反序列化,把客户端发送过来的数据,经过request以后变成字典 ...
- DRF序列化器的使用
序列化器的使用 序列化器的使用分两个阶段: 在客户端请求时,使用序列化器可以完成对数据的反序列化. 在服务器响应时,使用序列化器可以完成对数据的序列化. 序列化的基本使用 使用的还是上一篇博文中使用的 ...
- DRF 序列化器-Serializer (2)
作用 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 完成数据校验功能 3. 反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器 ...
- drf序列化器与反序列化
什么是序列化与反序列化 """ 序列化:对象转换为字符串用于传输 反序列化:字符串转换为对象用于使用 """ drf序列化与反序列化 &qu ...
- 怎样快速高效的定义Django的序列化器
1.使用Serializer方法自己创建一个序列化器 先写一个简单的例子 class BookInfoSerializer(serializers.Serializer): ""& ...
- 对drf序列化器的理解
序列化: 将对象的状态信息转换为可以存储或传输的形式的过程.(百度定义) 对应到drf中,序列化即把模型对象转换为字典形式, 再返回给前端,主要用于输出 反序列化: 把其他格式转化为程序中的格式. 对 ...
- Django:(08)序列化器
1.序列化和反序列化变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上.反过来,把变量内容从序列化的对象重新读到内存里称之为反序列 ...
- 关于定义序列化器时,read_only和write_only有什么作用
关于序列化和反序列化 在谈论前,先说一下序列化和反序列化,这两个概念最初是在学习json的时候提出来的,回头来看,其实可以用最初的理解就可以了 序列化就是将对象转化方便传输和存储字节序列,例如js ...
随机推荐
- CF1559D1. Mocha and Diana (Easy Version)
原题链接:1559D1. Mocha and Diana (Easy Version) 题意: 小明和小红各有一个具有\(n\)个结点的森林,现执行操作: 加一条边,使得两人的森林还是森林 小明加一条 ...
- 教你如何使用PyTorch解决多分类问题
本文分享自华为云社区<使用PyTorch解决多分类问题:构建.训练和评估深度学习模型>,作者: 小馒头学Python. 引言 当处理多分类问题时,PyTorch是一种非常有用的深度学习框架 ...
- Docker 安装教程
一.离线安装 一.CentOS 离线安装 一.下载地址 1.选择系统的型号,选择linux-CentOS 下载地址 2.上传文件到CentOS 服务器 #选择文件 rz 二.开始安装 1.解压压缩包 ...
- C# 字节数组、各进制字符串数据互转
前言 日常开发过程中,格式转换是必不可少的重要环节,经常是十进制转十六进制.十六进制转byte数组又转换回来来回转换,最然进制转换很基础同时 C# 也提供了很多直接方便进行格式转换的方法,但是封装一个 ...
- Mybatis-Flex之基础搭建
1.是什么? MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量.同时拥有极高的性能与灵活性.我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的Query ...
- bash shell笔记整理——tail命令
作用 Print the last 10 lines of each FILE to standard output. With more than one FILE, precede each wi ...
- 有意思,我的GitHub账号值$23806.2,快来试试你的?
睡不着,看到一个有意思的网站:Estimate Github Worth Generator. 它可以用来估算 GitHub 账号的价值.马上试了一下. 我的账号估值:$23806.2 操作很简单,点 ...
- uniapp的app苹果应用商店上架最简教程
除了测试版本之外,uniapp打包好的ipa文件是无法直接安装在普通用户的手机上面,这是苹果的证书和描述文件的机制的原因. 因此我们需要将打包好的ipa文件上架到苹果应用商店,也就是app store ...
- 云MSP服务案例丨某知名制造集团的Oracle RAC部署实践
简介: 随着DT时代到来,移动互联网.物联网开始高速发展,更多的企业意识到了数据库架构选型对业务发展的重要性,如何管理和利用好数据已经变得越来越重要.Oracle作为世界上目前最流行的关系型数据库管理 ...
- JavaFx之全局异常捕获(二十)
JavaFx之全局异常捕获(二十) javafx开发时,我们有时候需要捕获未处理的异常.手动抛出的异常,在main方法中添加下面代码: public static void main(String[] ...