首页 > 其他分享 >33.ModelSerializer详解

33.ModelSerializer详解

时间:2022-10-08 15:33:23浏览次数:50  
标签:ModelSerializer 33 auth read only 详解 序列化 id

ModelSerializer特点

  • 根据Model模型的定义,自动生成字段
  • 自动生成相应的验证器
  • 实现create和update
  • 自动默认将关系字段映射成PrimaryKeyRelatedField主键关系字段
  ModelSerializer指定序列化字段三种方法
class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        # 1.序列化指定字段
        fields = ('id', 'name',)
        # 2.序列化全部所有的字段
        fields = '__all__'
        # 3. 序列化除了user以外的所有字段
        exclude = ('user',)
        
'''
三种方法只能使用一种
第二种和第三种方法有暴露数据的风险
例如数据库有password字段,第二种会直接序列化出来,第三种,如果没有排除的话,也会序列化出来
'''
  depth depth用于指定序列化字段时嵌套的深度 如下其中的category分类返回了对应的两个分类id 不查看category数据的话 我们并不知道对应id的name是什么  
class TextSerializer(serializers.ModelSerializer):
    auth = AuthSerializer()

    class Meta:
        model = Text
        fields = ('id', 'title', 'content', 'auth', 'category', 'created')
        # 修改Text序列化器,指定depth深度为1
        depth = 1
可以看出指定深度后,返回的内容 除了id还有对应的name   read_only_field
'''
如果我们使用Serializer类写序列化的时候,有字段希望只读不被修改的话,会通过read_only字段设定,例如
name = serializer.Charfield(read_only=True) 

在ModelSerializer中,如果要设定的只读字段的话使用read_only_field批量指定元组即可
不需要像serializer中一个一个字段设置指定
'''

class Meta:
    model = Text
    fields = ('id', 'title', 'content', 'auth', 'category', 'created')
    depth = 1
    read_only_field = ('created','auth',)
  extra_kwargs额外的关键字参数
class Meta:
    model = Text
    fields = ('id', 'title', 'content', 'auth', 'category', 'created')
    depth = 1
    read_only_field = ('created','auth',)
    # 使用extra_kwargs指定字典
    extra_kwargs = {
        # key就是字段名,value就是要设置的参数
        'title':{'write_only':True,'require':True},
    }
 

标签:ModelSerializer,33,auth,read,only,详解,序列化,id
From: https://www.cnblogs.com/Mickey-7/p/16769090.html

相关文章

  • 【Python小工具】爬虫之使用OpenCV识别数字+字母验证码详解,告别收费
    Python小工具系列是一个使用Python实现各种各样有意思的小玩意儿的系列,包括制作个性化的二维化、词云、简单爬虫等,持续更新中,如果你感兴趣就关注一波吧!一、基本介绍......
  • VSCode中值得推荐的常用的33个高效前端插件「效率篇」
    VSCode是我们前端开发的一个强大的IDE,所以选择趁手好用的插件是提高开发效率,然后剩下的时间用来摸鱼是很有必要滴。IndenticatorIndenticator: 直观地突出显示当前的缩进......
  • Linux的free命令详解
    -k以KB为单位显示内存使用情况-m以MB为单位显示内存使用情况-g以GB为单位显示内存使用情况-o不显示缓冲区调节列-s<间隔秒数>持续观察内存使用状况......
  • GPIO点灯工程的详解
    GPIO点灯工程的实现1、时钟的选择BYPASSClockSource(旁路时钟源)指无需使用外部晶体时所需的芯片内部时钟驱动组件,直接从外界导入时钟信号。Crystal/CeramicResonat......
  • java学习笔记33
    面向对象(构造器详解)、无参构造packageoop2;​publicclassperson{  //一个类即使什么都不写,它也会存在一个方法  //显示的定义构造器  //无参构造(初始化......
  • python内置模块decimal模块详解:提供十进制浮点运算支持;主要用来处理小数(四舍五入、精
    前言1、 decimal 模块提供十进制数据类型,并且存储为十进制数序列;2、 decimal 模块提供有界精度:用于存储数字的位数是固定的,可以通过 decimal.getcontext().prec=x ......
  • LuoguP3377 【模板】左偏树(可并堆)
    题意如题,一开始有\(n\)个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作:1xy:将第\(x\)个数和第\(y\)个数所在的小根堆合并(若第\(x\)或第\(y\)个......
  • 140-《大数据架构师》Flink state状态详解_ev
          keyedstate是一个task维护多个state,operator是维护一个state           ......
  • CentOS 7.9 安装 jdk-8u333
    一、CentOS7.9安装jdk8地址https://www.oracle.comhttps://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 使用Xftp......
  • comp9334辅导 proj2
    ​解析主要是第6部分。test*:mode.txt,para.txtinterarrival_.txtandservice_.txt输出为两个文件。mode*.txt:randomortrace个人感觉随机的模式更麻烦,所以先......