自定义字段
如果需要自定义字段,则需要继承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