Django Rest Framework 序列化(上)
一、进一步使用 Serializer
① 路由
② 视图
③ 使用 serializer
代码语言:javascript复制# choices 字段显示
user_type = serializers.CharField(source="get_user_type_display")
# 自定义 serializer 中的 key 值
pwd = serializers.CharField(source="password")
# 关联对象属性
group_title = serializers.CharField(source="group.title")
# 多对多关系
roles = serializers.CharField(source="roles.all")
# 表示自定义方法,显示 queryset 对象详情
roles_info = serializers.SerializerMethodField()
- 如果没有指定在 Field 中没有定义 source 参数的时候,就自动与数据库 models 定义的字段进行匹配,如上面的 username 字段。在定义字段后,Serializer 类中可以自定义属性,如 type。
- 当 models 中是以 choice 定义时:需要定义 source 参数,定义 get_字段名_display 才能获取数据,这与在模板语言中的用法一样,如上面的 user_type。
- 外键关联的时候,直接 外键字段名.属性 的方式定义传参给 source 参数即可,如上面的 group.title。
- 对于 roles 字段,想直接获取所有的对象,但是无法做到细粒度的将对象的所有属性展示出来,只能获取到 QuerySet 对象。
- 自定义字段,处理数据,如 roles_info 获取所有的 role 对象的属性,处理数据可以定义方法,方法名格式为 get_属性,并 return 最终返回值。