ModelSerializer 使用

  • 不需要单独写字段的 序列化工具类 相当于 ModelForm

写法:以及 注意事项:

  1. 继承 serializers.ModelSerializer

  2. 在类中填写 class Meta: 指定数据

    • model=models.Books 指定表

      fields = '__all__' 指定字段

      depth = 1 # 所有有关系的字段都变成 read_only 一般不使用

      exclude = [] # 排除某个字段

      extra_kwargs = { } # 每个字段的一些额外参数

      'booksType': {'write_only': True},

  3. 对于特殊字段的 显示

    • 定义字段以及字段对应的方法
    • 字段名对应models 中的字段名 也可以不对应 只针对于特殊 显示 多选 外键 多对多
    • 指定为 serializers.SerializerMethodField(read_only=True)的字段类型
    • SerializerMethodField 会自动去找 get_字段名 的方法执行
    • 方法定义 方法名要加上get_的前缀 def get_booksType_info(self, book_obj):
    • book_obj 就是当前别序列化的对象

    方法中:

    • '''处理choices 字段''' 同样返回 对象的 choices字段 显示方法 get_字段名_display

      return 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

特殊字段的展示

  1. 对于页面中 原值字段的 显示问题 在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 使用的更多相关文章

  1. 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 ...

  2. Django REST Framework(一) Serializer和ModelSerializer

    REST Framework概述 Django REST framework是一套基于Django的REST框架,是一个用于构建Web API的功能强大且灵活的工具包. 1.RESTful 简述Rep ...

  3. [Django REST framework - 自动生成接口文档、分页]

    [Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...

  4. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  5. 用Django Rest Framework和AngularJS开始你的项目

    Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...

  6. Django REST framework+Vue 打造生鲜超市(一)

    一.项目介绍 1.1.掌握的技术 Vue + Django Rest Framework 前后端分离技术 彻底玩转restful api 开发流程 Django Rest Framework 的功能实 ...

  7. Django REST framework+Vue 打造生鲜超市(五)

    六.商品类别数据展示 6.1. 商品类别数据接口 (1)商品分类有两个接口: 一种是全部分类:一级二级三级 一种是某一类的分类以及商品详细信息: 开始写商品分类的接口 (2)序列化 给分类添加三级分类 ...

  8. Django REST framework+Vue 打造生鲜超市(十二)

    十三.首页.商品数量.缓存和限速功能开发  13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地 (1)goods/serializer class B ...

  9. Python Django rest framework

    本节内容 Django rest framework 安装 Django rest framwwork 环境配置 简单举例说明 Django中使用 rest framework 1.1 安装 Djan ...

  10. django rest framework serializers

    django rest framework serializers序列化   serializers是将复杂的数据结构变成json或者xml这个格式的 serializers有以下几个作用:- 将qu ...

随机推荐

  1. SQL 注入漏洞

    首先要知道sql注入形成的原因:用户输入的数据被sql解释器执行 sql注入又分:数字型,字符型,cookie 注入,post注入,延时注入,搜索注入,base64注入 如何甄别一个模块是否有sql注 ...

  2. c# 创建,加载,修改XML文档

    using System.Xml.Linq; static void Main(string[] args) { XDocument xDocument = new XDocument(new XEl ...

  3. 第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码

    新手教程: 前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的.就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做. 准备工作: 编译 ...

  4. Java学习笔记之——封装

    1. 属性和方法放到类中 2. 信息的隐藏 (1) 属性的隐藏 (2) 方法实现的细节隐藏 3. 权限修饰符: 从小到大的顺序:private->默认的(什么都不写)->protected ...

  5. 【Spring】29、SpringBoot中@SpringBootApplication的使用

    之前用户使用的是3个注解注解他们的main类.分别是@Configuration,@EnableAutoConfiguration,@ComponentScan.由于这些注解一般都是一起使用,spri ...

  6. 三角形(hdu1249)递推

    三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. 史上最全python面试题详解(三)(附带详细答案(关注、持续更新))

    38.面向对象深度优先和广度优先是什么? 39.面向对象中super的作用? 40.是否使用过functools中的函数?其作用是什么? Python自带的 functools 模块提供了一些常用的高 ...

  8. 史上最全python面试题详解(一)(附带详细答案(关注、持续更新))

    python基础题(53道题详解) 1.简述解释型和编译型编程语言? 概念: 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序.然后,可直接运行这个程序. 解释型语言:把做好的源程序翻译一句 ...

  9. 19 个常用的 JavaScript 简写方法

    来自:SangSir 链接:https://segmentfault.com/a/1190000012673854 原文:https://www.sitepoint.com/shorthand-jav ...

  10. @Value取不到值的原因(引用application.properties中自定义的值)

    在spring mvc架构中,如果希望在程序中直接使用properties中定义的配置值,通常使用一下方式来获取: @Value("${tag}") private String ...