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

1|0序列化高级用法之source:

1|1  source的用法:

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

       前端展示效果:

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

      models中:

     序列化类中:

    前端展示的效果:

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

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

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

     前端的数据格式:

   方式二:在表模型中写:

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

    序列化类中:

   models中:

 

3|0多表关联反序列化保存:

    序列化类内:

 

 

4|0多表关联反序列化修改:

  

 

5|0反序列化字段校验其他:

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

6|0ModelSerializer使用:

    

   之前写的序列化类,继承了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了

 


__EOF__

本文作者xxxx
本文链接https://www.cnblogs.com/Hao12345/p/17413180.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   秃头不爱学  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示