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. C#常量和字段以及各种方法的语法总结

    目录 一. 常量和字段.... 1 1. 常量.... 1 2.字段.... 1 二.方法.... 2 1.实例构造器和类(引用类型).... 2 2.实例构造器和结构(值类型).... 2 3.类型 ...

  2. 6.7 使用show profile 进行sql分析

    1. 查看是否开启 show variables like 'profiling'; 2. 开启功能 set profiling = on 3. 运行sql #写的尽量耗时的sql,利于分析 sele ...

  3. 基于redis的分布式锁(不适合用于生产环境)

    基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分 ...

  4. jquery - append prepend after before animate clearQueue stop

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. CA 工作流程

    散列函数 Hash 常见的有 MD5, SHA1, SHA256, 该类函数特点是函数单向不可逆,对输入非常敏感,输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息篡改并验证数据的完 ...

  6. 广州.net俱乐部12月份ABP框架活动场地征集、志愿者征集、合作讲师\副讲师征集

    大家好,我在<被低估的.net(上) - 微软MonkeyFest 2018广州分享会活动回顾>一文中提到,我将在12月份搞一场ABP框架活动,现向大家征集活动场地.志愿者.合作讲师\副讲 ...

  7. Scrollview嵌套Recyclerview嵌套滑动冲突,导致滑动时会出现卡顿的现象

    recyclerView.setLayoutManager(new GridLayoutManager(mContext,2){ @Override public boolean canScrollV ...

  8. Jmeter接口测试问题及解决方法积累

    一.各个类型参数的位置 plain body query parameter URI 路径上 二.特殊字符处理 \"作为参数输入到接口,会出现错误 响应断言中如果有用到正则表达式,不能包含正 ...

  9. 调用Android自带浏览器打开网页

    转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928608 在Android中可以调用自带的浏览器,或者指定一个浏 ...

  10. CSS杂谈(1)图