zoukankan      html  css  js  c++  java
  • drf中ListSerializer源码

    开始进行ListSerializer源码分析

    从ModelSerializer开始

    ModelSerializer没有__init__方法,我们去寻找他的父类(Serialzer)也没有__init__方法,我们再去找爷爷类

    (BaseSerializer),BaseSerializer类不仅有__init__方法也有__new__方法

    补充:在实例化对象时,先走new方法,再走init方法

    BaseSerializer.__new__方法

    img

    我们在进行群增,群改都会在实例化对象的括号内加上many=True

    在这的cls就是我们写的序列化类

    假设我们写了many=True,会通过if判断,直接走cls.many_init

    进入many_init方法

    img

    这里的child_serializer会重新走一遍实例化,但这次实例化,kwargs中已经没有many了,并不会走many_init,而是直接正常实例化,这就能应证我们在listserializer中能直接使用self.child直接拿到我们写的序列化类

    这里的meta也是我们序列化类中的定义的子类,我们通过反射拿到我们自定义的listserializer,在我自定义的listserializer中重写了update方法,并继承listserializer,所以我们只是重写了listserializer类中的update方法

    从最后一步return能看出,我们序列化类实例化时,如果有many=True,实际上是listserializer类的实例化

    源码的博客是真的难写,别喷

  • 相关阅读:
    (转)expfilt 命令
    (转)第二十三节 inotify事件监控工具
    数据结构之平衡二叉树(AVL)
    安装apache2.4.10
    centos下编译安装mysql5.6
    随机 I/O & 顺序 I/O
    什么是mysql中的元数据
    linux中mail函数不能发送邮件怎么办
    检测MYSQL不同步发邮件通知的脚本
    mysql自动备份策略
  • 原文地址:https://www.cnblogs.com/asdaa/p/11695292.html
Copyright © 2011-2022 走看看