首页 > 其他分享 >序列化高级用法之source,序列化高级用法之定制字段的两种方式,多表关联反序列化保存,反序列化字段校验其他,ModelSerializer使用

序列化高级用法之source,序列化高级用法之定制字段的两种方式,多表关联反序列化保存,反序列化字段校验其他,ModelSerializer使用

时间:2023-05-18 20:23:55浏览次数:42  
标签:多表 用法 source 字段 ModelSerializer 序列化 类中

序列化高级用法之source:

  source的用法:

    1 修改前端看到的字段key值---》source指定的必须是对象的属性:

       前端展示效果:

   2. 修改前端看到的value值,---》source指定的必须是对象的方法

      models中:

     序列化类中:

    前端展示的效果:

   3.可以关联查询(得有关联关系)

 序列化高级用法之定制字段的两种方式:

  方式一:在序列化类中写
    1 写一个字段,对应的字段类是:SerializerMethodField
    2 必须对应一个 get_字段名的方法,方法必须接收一个obj,返回什么,这个字段对应的value就是什么

     前端的数据格式:

   方式二:在表模型中写:

    1 在表模型中写一个方法(可以使用:property),方法有返回值(字典,字符串,列表)
    2 在序列化类中,使用DictField,CharField,ListField

    序列化类中:

   models中:

 

多表关联反序列化保存:

    序列化类内:

 

 

多表关联反序列化修改:

  

 

反序列化字段校验其他:

    -字段自己的:max_length,required。。。
    -字段自己的:配合一个函数name = serializers.CharField(max_length=8,validators=[xxx])
    -局部钩子
    -全局钩子

ModelSerializer使用:

    

   之前写的序列化类,继承了Serializer,写字段,跟表模型没有必然联系
    class XXSerialzier(Serializer)
    id=serializer.CharField()
    name=serializer.CharField()

    XXSerialzier既能序列化Book,又能序列化Publish


   现在学的ModelSerializer,表示跟表模型一一对应,用法跟之前基本类似

    1 写序列化类,继承ModelSerializer
    2 在序列化类中,再写一个类,必须叫
      class Meta:
        model=表模型
        fields=[] # 要序列化的字段
    3 可以重写字段,一定不要放在class Meta
      -定制字段,跟之前讲的一样
    4 自定制的字段,一定要在fields中注册一下
    5 class Meta: 有个extra_kwargs,为某个字段定制字段参数
    6 局部钩子,全局钩子,完全一致
    7 大部分请情况下,不需要重写 create和update了

 

标签:多表,用法,source,字段,ModelSerializer,序列化,类中
From: https://www.cnblogs.com/Hao12345/p/17413180.html

相关文章

  • 序列化的高级用法与ModelSerializer的使用
    序列化的高级用法与ModelSerializer的使用序列化高级用法之source(了解)source的三个用法:1.取别名: book_name=serializers.CharField(source='name')#book_name为前端可以看到的字段值,name是对象真实的属性。注意:别名和真实属性不能相同2.美化值: #......
  • yum的基础常用用法
    yum的安装与配置以Centos7.x为例,检查yum是否已经安装,执行如下命令:rpm-qa|grepyum如果没有任何显示,表示系统中还没有安装yum工具,yum安装包在Centos系统光盘中可以找到,执行如下指令进行安装:rpm-ivhyum-*.noarch.rpm安装yum需要python-elementtree、python-sqlite、urlgrabb......
  • 滑动窗口的极值与deque用法
    在程序设计中,为了优化算法可能会用到滑动窗口或者双指针的思想,这种算法能够蛮力情况下的复杂度\(O(n^2)\)降低为线性。滑动窗口的问题通常可以用双指针来解决,即用头尾两个指针来约束窗口大小。网上对于这两个名词的定义和解释莫衷一是。个人理解,固定一段窗口/区间大小而衍生的问......
  • Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271)
    参考:https://github.com/vulhub/vulhub/blob/master/weblogic/CVE-2017-10271/README.md反弹shellEXP:POST/wls-wsat/CoordinatorPortTypeHTTP/1.1Host:172.31.14.123:7001Accept-Encoding:gzip,deflateAccept:*/*Accept-Language:enUser-Agent:Mozilla/5.0(com......
  • table常用用具函数 - list用法
     table_listext.luafunctionlist.reset(listTb,val)fori=1,#listTbdolistTb[i]=valendendfunctionlist.castItemToNum(listTb)fori=1,#listTbdolistTb[i]=tonumber(listTb[i])endreturnlistTbendfunctionlis......
  • table常用工具函数 - 表用法
     table_ext.lua---如果table不为空则新建functiontable.getEmptyTable(tb)ifnil==tbornil~=next(tb)thenreturn{}endreturntbendfunctiontable.isEmpty(tb)returnnil==tbornil==next(tb)endfunctiontable.swap(tb,k1......
  • drf-序列化组件
    目录作业讲解1Request类源码分析1.1总结的知识点1.2源码分析1.2APIView+Response写个接口2序列化组件介绍3序列化类的基本使用3.1查询所有和查询单条4常用字段类和参数(了解)4.1常用字段类4.2字段参数(校验数据来用的)5反序列化之校验6反序列化之保存75个接口代码路由......
  • 【hadoop】 3005-hadoop对象序列化编码
    一、hadoop序列化操作Writable接口,是根据 DataInput 和 DataOutput 实现的简单、有效的序列化对象MR的任意Key和Value必须实现Writable接口.MR的任意key必须实现WritableComparable接口二、自定义Writable,实现MapReduce程序1、需求内容日期 ......
  • jcmd常用用法
    jvmcommand用于将诊断命令请求发送到正在运行的java虚拟机,从jdk7开始提供。是一个功能全面的工具,可用于获取目标java进程的性能统计,jfr,内存使用,垃圾收集,线程堆栈,jvm运行时间。C:\Users\user>jcmd-hUsage:jcmd<pid|mainclass><command...|PerfCounter.print|-ffile>o......
  • 18、什么是 java 序列化?什么情况下需要序列化?
    序列化就是一种用来处理对象流的机制。将对象的内容流化,将流化后的对象传输于网络之间。序列化是通过实现serializable接口,该接口没有需要实现的方法,implementSerializable只是为了标注该对象是可被序列化的,使用一个输出流(FileOutputStream)来构造一个ObjectOutputStream对象,接......