Django day25 序列化组件(*****)
2024-09-04 21:04:09
序列化:将变量从内存中存储或传输的过程称之为序列化
1、序列化组件是干什么用的?
对应着表,写序列化的类
2、如何使用序列化组件
Serializer
1) 重命名:用source:xx = serializers.CharField(source='name')
2) 取出出版社名字:
from rest_framework import serializers
方式一:
# 在模型表中重写__str__方法:
publish=serializers.CharField() 方式二:
# 用source,例:拿出出版社的城市
publish=serializers.CharField(source='publish.city')
如果不指定source,字段必须对应起来,如果指定了source,字段可以任意命名
3)使用:
实例化产生一个对象(传参数)
对象.data ---》拿到字典
3、(其他)source:可以指定字段,也可也指定方法
# publish.test这是个方法,会执行该方法,并拿到返回结果
test = serializers.CharField(source='publish.test')
必须要写一个方法预制对应
get_字段名(self,obj对象)
# 写一些逻辑
# 也可以用序列化的类,继续序列化别的对象
return ''
3、 SerializerMethodField,可以指定一个方法
publish=serializers.SerializerMethodField()
# 方法名:叫get_字段名,要传参数,参数是:当前book对象
def get_publish(self,obj):
# obj 是当前book对象
dic={'name':obj.publish.name,'email':obj.publish.email}
return dic
方法内部可以继续用其他的序列化类
4、ModelSerializer:定义一个类,必须在类中写
class Meta:
model=指定表
# fields = '__all__'
# 指定只取这两个字段
fields = ['nid','name']
# 去掉指定的字段
# exclude=['publish','authors']
# fields,跟exclude不能连用
# 指定深度,就是跨几个表(官方建议小于10,我给你的建议小于3)
# depth = 2
5、实例化传参数的时候,可以按关键字传:
BookSerializer(instance='可以是queryset对象,也可以是单个对象',many=True/False)
最新文章
- Arch Linux 安装博通 BCM4360 驱动(Arch Linux, Ubuntu, Debian, Fedora...)
- Android PopupWindow的使用和分析
- json注意:
- 手工加载DLL
- 屏蔽input导致的回车提交事件
- 一个非常简单的RPC服务
- Axure母版
- 各种边框样式。。本以为border不是这么用的。
- opencv china 网站,好1376472449
- 数据库范式(1NF 2NF 3NF BCNF)
- hibernate的运行流程
- Eclipse配置Hadoop开发环境
- 一个项目经理对主流项目管理工具的对比:禅道VS华为软件开发云
- css边框小结
- vuex直接修改state 与 用dispatch/commit来修改state的差异
- awk词频统计功能
- Eclipse + Maven 安装配置
- OpenCV实现SfM(三):多目三维重建
- Web开发框架趋势
- hdu2295-Radar