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
原文地址:https://www.cnblogs.com/guanxiying/p/13261649.html