1. 使用serializer.data的mixin,有增改查方法,查询分为查询列表和查询详情,删除不涉及

    DjangoRestFramework中serializer.data属性经历了什么

  2. ModelSerializer继承自Serializer类,Serializer继承自BaseSerializer类,BaseSerializer继承自Field类

    DjangoRestFramework中serializer.data属性经历了什么

  3. ModelSerializer没有data属性,data属性在Serializer类中实现

    DjangoRestFramework中serializer.data属性经历了什么

  4. serializer.data属性是装饰器,也就是说调用属性实际就是调用方法,super().data返回的数据实际上调用的是Baseserializer类中的data属性

    DjangoRestFramework中serializer.data属性经历了什么

  5. data属性实际调用to_representation方法,BaseSerializer类中to_representation方法属于抽象方法,具体实现在子类Serializer中,这里可以看到如果是mixin中的创建修改查询方法,就有instance属性,就返回instance中的字段和对应的值,如果只有_validated_data属性,就返回验证过的数据,否则返回浏览器原始数据

    DjangoRestFramework中serializer.data属性经历了什么
    DjangoRestFramework中serializer.data属性经历了什么

  6. Serializer类中重写了to_representation方法,所以实际上serializer.data调用的是Serializer类中的to_representation方法,这里_readable_fields方法返回的是不包括write_only的字段,最终返回的是instance实例中的字段和对应的值,数据类型是一个类字典

    DjangoRestFramework中serializer.data属性经历了什么
    DjangoRestFramework中serializer.data属性经历了什么

  7. 总结:mixin中的serializer.data实际调用的是Serializer类中的data属性,最终返回一个类字典数据类型,最终调用的是Serializer类中的to_representation方法,这个方法把instance属性中的字段和对应值拿出来,不包括write_only的字段

相关文章:

  • 2021-07-04
  • 2021-08-07
  • 2021-04-24
  • 2021-04-23
  • 2022-12-23
  • 2022-01-11
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-06-23
  • 2021-10-17
  • 2021-11-24
  • 2021-06-28
  • 2022-01-13
相关资源
相似解决方案