Serializer的高级用法
Posted guanxiying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Serializer的高级用法相关的知识,希望对你有一定的参考价值。
__init__
、__new__
、__call__
方法的执行顺序
__new__
方法
__new__
:当类实例化对象时优先执行,执行要比__init__
早,产生了一个空的对象,什么都没有
__init__
方法
__init__
:当类实例化对象时会执行,与__new__
方法的区别就是__init__
类似穿衣服的人,__new__
类似全裸的人
__call__
方法
__call__
:当实例化的对象被调用时触发
Serializer高级用法
source的使用
-
1、返回结果时一般不会直接将数据库字段作为key返回而是通过别名,这个时候就可以使用source来与数据库中真正的字段名进行绑定
xxx=serializers.CharField(source=‘title‘)
-
2、当我们想要跨表查询某个字段作为返回值时可以使用source,它支持.跨表
publish=serializers.CharField(source=‘publish.email‘)
-
3、source还可以执行模型类中的方法并将该方法的返回值作为字段的返回结果
pub_date=serializers.CharField(source=‘test‘) test是Book表模型中的方法
SerializerMethodField()的使用
需要有个配套的方法,该配套方法的方法名必须是get_字段名,其返回值就是要显示在前端的内容
authors=serializers.SerializerMethodField()
def get_authors(self,instance):
# book对象
authors=instance.authors.all() # 取出所有作者
ll=[]
for author in authors:
ll.append({‘name‘:author.name,‘age‘:author.age})
return ll
以上是关于Serializer的高级用法的主要内容,如果未能解决你的问题,请参考以下文章