序列化,序列化高级
序列化
序列化:把对象(Dict)转成可传输数据(JSON)
反序列化:把传输数据(json)转成对象(Dict)
序列化高级
StringRelatedField
如果想让序列化变成字符串,那这个字段就变成了只读属性,反序列化就不支持了
字段名 必须在模型里面
StringRelatedField 将返回一个对应关系 model 的 unicode() 方法的字符串。
PrimaryKeyRelatedField
如果多个需要加many=True read_only=True
如果单个需要加read_only=True
HyperlinkedRelatedField
使用 HyperlinkedRelatedField 将返回一个超链接,该链接指向对应关系 model 的详细数据,view-name 是必选参数,为对应的视图生成超链接。
错误解决:
在视图中所有使用CategorySerializerde的地方加上context={'request': request}
serializer = CategorySerializer(categorys, many=True, context={'request': request})
SlugRelatedField
使用 SlugRelatedField 将返回一个指定对应关系 model 中的字段,需要参数 slug_field 中指定字段名称。
HyperlinkedIdentityField
使用 HyperlinkedIdentityField 将返回指定 view-name 的超链接的字段。
HyperlinkedModelSerializer
HyperlinkedModelSerializer 类与 ModelSerializer 类相似,只不过它使用超链接来表示关系而不是主键。
嵌套序列化关系模型
顾名思义就是序列化里面有另一个序列化类
depth
这个字段可以用来深度遍历
SerializerMethodField
通过这个属性我们可以自定义一些属性
source
序列化的时候指定数据源
to_representation方法
序列化器的每个字段实际都是由该字段类型的to_representation方法决定格式的,可以通过重写该方法来决定格式。