序列化类中的自定义字段设置
程序员文章站
2022-06-15 15:01:13
序列化类中的自定义字段设置 1.针对具有choices属性的字段的用法 这类型字段格式都是一个字典类型,数据库中存储key,给客户端显示的是对应的value,但是正常的数据库操作只能读取key,拿不到value,这个时候需要用到source方法。 Note 格式为:source = 'get_提取的 ......
序列化类中的自定义字段设置
1.针对具有choices属性的字段的用法
这类型字段格式都是一个字典类型,数据库中存储key,给客户端显示的是对应的value,但是正常的数据库操作只能读取key,拿不到value,这个时候需要用到source方法。
note
格式为:source = 'get_提取的字段名_display',即可显示value
class userinfoserializer(serializers.serializer): user_type = serializers.charfield(source='get_user_type_display')
2.针对外键的用法
如果我们需要在序列化类中通过本类获得外键关联的类的具体字段信息,那么也需要用到source方法,格式上略有不同。
note
格式为:source = '本类中定义的外键名.希望获得的字段名'
本类中关联的外键名实质上就是外键的实例化对象,可以通过对象.属性的方式获得
class userinfoserializer(serializers.serializer): group = serializers.charfield(source='usergroup.title')
3.针对多对多关系的用法
多对多关系中,如果用哪个第二种方式去编写的代码获得不到具体的字段信息,本类中定义的外键名.all得到的是由具体对象组成的列表,如果希望获得对应的每一个对象的具体字段信息,需要自定义个函数来执行
note
- 字段类型必须是:serializers.serializermethodfield()
- 自定义函数参数传递为row, 通过row.关联的字段名.all()获取所对多中所有的关联对象信息
class userinfoserializer(serializers.serializer): role = serializers.serializermethodfield() def get_role(self, row): row_obj_list = row.role.all() # 获取到对应的所有对象列表 ret = {} for item in row_obj_list: ret[item.id] = item.title # 由于获得的是一个对象列表,所以我们需要遍历出每一个对对象,再通过对象来获得每一个字段信息 return ret
note
自定义的设置在modelserializer类下同样适用
4.自动序列化连表操作:
class userinfoserializer1(serializers.modelserializer): user_type = serializers.charfield(source='get_user_type_display') usergroup = serializers.charfield(source='usergroup.title') class meta: model = userinfo fields = ['id', 'user_type','usergroup', 'role'] depth = 1 # 自动序列化连表操作:depth表示的是在从数据库中获取数据是的深度,默认为0,表示只取最外层,当1的时候指的是再往下取一层,django设置的最大深度为10,但实际的开发中最好不要超过三层
下一篇: SPcomm
推荐阅读
-
Python的Django框架中设置日期和字段可选的方法
-
Laravel框架中扩展函数、扩展自定义类的方法
-
iOS多线程应用开发中自定义NSOperation类的实例解析
-
ThinkPHP中自定义目录结构的设置方法
-
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
-
Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限
-
网站设计中如何详细的自定义404错误页面的制作和设置
-
WordPress中编写自定义存储字段的相关PHP函数解析
-
C#_Excel数据读取与写入_自定义解析封装类_支持设置标题行位置&使用excel表达式收集数据&单元格映射&标题映射&模板文件的参数数据替换(第二版-增加深度读取和更新功能)
-
FastJson序列化自定义返回字段,普通类从spring容器中获取bean