DRF

自定义字段

如果需要自定义字段,则需要继承Field,并且覆写.to_representation().to_internal_value()方法。

  • .to_representation()用于将数据类型转换为原始的可序列化的数据类型
  • .to_internal_value()用于将原始数据类型还原成python的数据表达

覆写序列化和反序列化的行为

如果需要改变序列化类的序列化和反序列化的行为,可以覆写.to_representation().to_internal_value()方法。可以实现以下等功能:

  • 向新的序列化类中新增功能
  • 调整已有的类的行为
  • 提升常用且返回大量数据的API序列化性能

.to_representation()

获取需要序列化的对象实例,并返回原始表达。即返回python的内置对象,如

def to_representation(self, instance):
    """Convert `username` to lowercase."""
    ret = super().to_representation(instance)
    ret['username'] = ret['username'].lower()
    return ret

.to_internal_value(self, data)

输入未校验的数据,返回校验后的数据。并可以通过serializer.validated_data获取。返回值将会传给.create() 或者 .update()方法如果.save()方法被调用。data通常是request.data

  • Field中的source可以指定从数据表定义中的哪一个字段来序列化

参考

https://www.django-rest-framework.org/api-guide/serializers/#to_representationself-instance

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 幽默再学习1、男人逛街:缺什么逛什么;女人逛街:逛什么缺什么!2、一个女孩她再好看,只要有双下巴,那。。。那也比其...
    ItBeacher阅读 1,115评论 0 0
  • 反序列化: 将从 前端获取到的数据对象转化为 模型类字段,对其进行CRUD操作。对 验证过程 和 保存过程 进行封...
    hang1720阅读 252评论 0 0
  • 7. 序列化器-Serializer 作用: 7.1 定义序列化器 Django REST framework中的...
    childhood_1013阅读 166评论 0 0
  • 1. 版本 了解* 可以放在url,这种是比较推荐的。它需要配套的路由,一般所有的CBV都要使用,所以放在全局配...
    上帝大人阅读 177评论 0 1
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,573评论 16 22