序列化高级用法之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了
标签:多表,用法,source,字段,ModelSerializer,序列化,类中 From: https://www.cnblogs.com/Hao12345/p/17413180.html