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. AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher

    報錯: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML ...

  2. Object类型转换成自定义类型(向下转型)

    Object类型转换成自定义类型 场景: 从数据库或者别的途径接收对象的时候用Object,但是用的时候怎么object点(方法提示 | alt+'/'),都点不出自定义类型的方法. 比如,数据库查询 ...

  3. 给大家带来一些 horm的一些知识!

    1. form action 提交地址     https://www.baidu.com merhod 提交 方式post get get是在http的url上提交不加密 post加密在http 中 ...

  4. 新浪IP库地址

    新浪IP库地址 http://int.dpool.sina.com.cn/iplookup/iplookup.php

  5. nginx部署与安装

    1.在学习ngnix的时候,免不了需要进行安装,安装其实很简单,一个shell脚本就可以搞定可以参考如下 使用root用户执行nginx-install.sh脚本即可,脚本如下: #!/bin/bas ...

  6. laravel中请求用例$request可用的一些方法小结

    laravel中$request可用的一些方法小结 1,请求方法的获取 $method = $request->method(); 2,检测请求方法 $res = $request->is ...

  7. Eslint使用(webpack中使用)

    一.安装 npm i -D eslint npm i babel-eslint \ eslint-config-airbnb \ // Airbnb的编码规范是在业界非常流行的一套规范 eslint- ...

  8. [转]原生JS-查找相邻的元素-siblings方法的实现

    在针对element的操作里,查找附近的元素是一个不可少的过程,比如在实现tab时,其中的一个div增加了“on”class,其他的去除“on”class.如果用jquery的朋友就肯定不会陌生sib ...

  9. LeetCode单排日记

    初衷 之前有研究过一段时间数据结构与算法,但平时使用的不多,就连排序都很少用(自从JDK8有了Stream,就再也没有手写排序了.),所谓用进废退,时至今日,能记住的已经不多了,还记得之前有一次面试, ...

  10. linux tmp清理这些事

    tmp目录 首先看下FHS的定义. FHS(Filessystem Hierarchy Standard) 的重点在于规范每个特定的目录下应该要放置什么样子的数据. tmp约定的存放内容 /tmp 这 ...