Django-rest-framework 接口实现 ModelSerializer 使用
ModelSerializer 使用
- 不需要单独写字段的 序列化工具类 相当于 ModelForm
写法:以及 注意事项:
继承
serializers.ModelSerializer在类中填写 class Meta: 指定数据
model=models.Books指定表fields = '__all__'指定字段depth = 1# 所有有关系的字段都变成 read_only 一般不使用exclude = []# 排除某个字段extra_kwargs = { }# 每个字段的一些额外参数
'booksType': {'write_only': True},
对于特殊字段的 显示
- 定义字段以及字段对应的方法
- 字段名对应models 中的字段名 也可以不对应 只针对于特殊 显示 多选 外键 多对多
- 指定为
serializers.SerializerMethodField(read_only=True)的字段类型 SerializerMethodField会自动去找 get_字段名 的方法执行- 方法定义 方法名要加上
get_的前缀def get_booksType_info(self, book_obj): - book_obj 就是当前别序列化的对象
方法中:
'''处理choices 字段''' 同样返回 对象的 choices字段 显示方法
get_字段名_displayreturn book_obj.get_booksType_display()'''处理 foreignkey 字段''' 调用 外键对应的 Serializer序列化类 参数传递 当前处理的 对象的 外键字段
return PublisherSerializer(book_obj.publisher).data使用.data来获取被序列化的 内容并返回'''处理 manytomany 字段''' 调用 外键对应的 Serializer序列化类 参数传递当前对象的多对多字段 用
all()取出对应的 所有 内容 并给出 many=true 的参数进行循环 操作 因为对应的 事多条内容.data取出序列化的内容 并返回return AuthorSerializer(book_obj.authors.all(),many=True).data
特殊字段的展示
- 对于页面中 原值字段的 显示问题 在Meta: 中 设置额外的字段来进行设置 设置为只能写入
class AuthorSerializer(serializers.Serializer):
id = serializers.IntegerField(required=False)
name = serializers.CharField(max_length=32)
class PublisherSerializer(serializers.Serializer):
id = serializers.IntegerField(required=False)
name = serializers.CharField(max_length=32)
class BooksModelSerializer(serializers.ModelSerializer):
'''相当于 modelForm'''
# SerializerMethodField 会自动去找 get_字段名 的方法执行
# booksType_info = serializers.SerializerMethodField(read_only=True)
# 简化写法 如果返回值是一行 可以不用写函数 根据 获取的 内容选择 字段
booksType = serializers.CharField(source='get_booksType_display')
publisher_info = serializers.SerialinmnnnnnnnnzerMethodField(read_only=True)
authors_info = serializers.SerializerMethodField(read_only=True)
def get_booksType_info(self, book_obj):
'''处理choices 字段'''
# obj 就是当前被序列化的对象
return book_obj.get_booksType_display()
def get_publisher_info(self, book_obj):
'''处理 foreignkey 字段'''
# book_obj.publisher ==> 得到和我这本书关联的出版社对象
return PublisherSerializer(book_obj.publisher).data
def get_authors_info(self, book_obj):
'''处理 manytomany 字段'''
print(book_obj)
return AuthorSerializer(book_obj.authors.all(),many=True).data
class Meta:
model = models.Books
fields = '__all__'
# depth = 1 # 所有有关系的字段都变成 read_only
# exclude = [] # 排除某个字段
extra_kwargs = { # 每个字段的一些额外参数
'booksType': {'write_only': True},
'publisher': {'write_only': True},
'authors': {'write_only': True},
}
Django-rest-framework 接口实现 ModelSerializer 使用的更多相关文章
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
- Django REST Framework(一) Serializer和ModelSerializer
REST Framework概述 Django REST framework是一套基于Django的REST框架,是一个用于构建Web API的功能强大且灵活的工具包. 1.RESTful 简述Rep ...
- [Django REST framework - 自动生成接口文档、分页]
[Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- 用Django Rest Framework和AngularJS开始你的项目
Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...
- Django REST framework+Vue 打造生鲜超市(一)
一.项目介绍 1.1.掌握的技术 Vue + Django Rest Framework 前后端分离技术 彻底玩转restful api 开发流程 Django Rest Framework 的功能实 ...
- Django REST framework+Vue 打造生鲜超市(五)
六.商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级 一种是某一类的分类以及商品详细信息: 开始写商品分类的接口 (2)序列化 给分类添加三级分类 ...
- Django REST framework+Vue 打造生鲜超市(十二)
十三.首页.商品数量.缓存和限速功能开发 13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地 (1)goods/serializer class B ...
- Python Django rest framework
本节内容 Django rest framework 安装 Django rest framwwork 环境配置 简单举例说明 Django中使用 rest framework 1.1 安装 Djan ...
- django rest framework serializers
django rest framework serializers序列化 serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用:- 将qu ...
随机推荐
- Prism 学习:从本地目录加载 Module
在 Prism 中,将外部模块加载到主程序有以下几种方式:Code.XAML.配置文件.指定模块目录:其中,如果要使用 Code 方式来加载 Module,则需要将该 Module 引用到当前项目中: ...
- 02-Java中的对象和类
面向对象: 程序由对象构成,每个对象包含对用户公开的特定功能部分(public)和隐藏实现部分(private). 类: 构造对象的模板 对象: 对象的行为 --- 可以对对象施加的操作(方法) 对象 ...
- js数据类型有哪些,js属性和方法的归属,
1.js的数据类型有哪些? 2.全局方法和全局属性? 一 1.js的本质就是处理数据,数据来自后台的数据库.所以变量就起到一个临时存储数据的作用. ECMAScript 制定了js的数据类型. 数据类 ...
- Flask 系列之 HelloWorld
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 创建一个显示 Hello World 页面的网站. 环境 ...
- CSS实现移动端横向滑动
html: <div class="chosen-container"> <div class="chosen-swiper"> < ...
- JS中sort()方法的用法,参数以及排序原理
sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串Unicode码点.语法:arrayObject.sort(sortby):参数sortby可选.规定排序顺序.必须是函 ...
- 照葫芦画瓢系列之Java --- Maven的介绍和安装
一.Maven是什么? Maven 是一个项目管理工具.它负责管理项目开发过程中的几乎所有的东西. 版本 maven有自己的版本定义和规则 构建 maven支持许多种的应用程序类型,对于每一种支持的应 ...
- Salesforce 外部对象
外部对象(External Object) 在Salesforce中,管理员或开发者可以通过"外部对象"将其他系统中的数据虚拟地展现为Salesforce的对象.每个外部对象都要连 ...
- Quill Editor使用公式
const katex = require('katex'); const win: any = window; win.katex = katex; 首先,引入katex @import '~kat ...
- UVA 1152 4 Values whose Sum is 0 (枚举+中途相遇法)(+Java版)(Java手撕快排+二分)
4 Values whose Sum is 0 题目链接:https://cn.vjudge.net/problem/UVA-1152 ——每天在线,欢迎留言谈论. 题目大意: 给定4个n(1< ...