序列化高级用法之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])
            -局部钩子
            -全局钩子
   之前写的序列化类,继承了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了


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号