序列化高级用法之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了

 

posted @ 2023-05-18 20:14  秃头不爱学  阅读(76)  评论(0)    收藏  举报