模型类序列化器ModelSerializer
如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。
ModelSerializer与常规的Serializer相同,但提供了:
- 基于模型类自动生成一系列字段
- 基于模型类自动为Serializer生成validators,比如unique_together
- 包含默认的create()和update()的实现
1. 定义
比如我们创建一个BookInfoSerializer:
class BookInfoSerializer(serializers.ModelSerializer):"""图书数据序列化器"""class Meta:model = BookInfofields = '__all__'
- model 指明参照哪个模型类
- fields 指明为模型类的哪些字段生成
我们可以在python manage.py shell中查看自动生成的BookInfoSerializer的具体实现
>>> from booktest.serializers import BookInfoSerializer
>>> serializer = BookInfoSerializer()
>>> serializer
BookInfoSerializer():id = IntegerField(label='ID', read_only=True)btitle = CharField(label='名称', max_length=20)bpub_date = DateField(allow_null=True, label='发布日期', required=False)bread = IntegerField(label='阅读量', max_value=2147483647, min_value=-2147483648, required=False)bcomment = IntegerField(label='评论量', max_value=2147483647, min_value=-2147483648, required=False)image = ImageField(allow_null=True, label='图片', max_length=100, required=False)
2. 指定字段
1) 使用fields来明确字段,__all__
表名包含所有字段,也可以写明具体哪些字段,如
class BookInfoSerializer(serializers.ModelSerializer):"""图书数据序列化器"""class Meta:model = BookInfofields = ('id', 'btitle', 'bpub_date')
2) 使用exclude可以明确排除掉哪些字段
class BookInfoSerializer(serializers.ModelSerializer):"""图书数据序列化器"""class Meta:model = BookInfoexclude = ('image',)
3) 显示指明字段,如:
class HeroInfoSerializer(serializers.ModelSerializer):hbook = BookInfoSerializer()class Meta:model = HeroInfofields = ('id', 'hname', 'hgender', 'hcomment', 'hbook')
4) 指明只读字段
可以通过read_only_fields指明只读字段,即仅用于序列化输出的字段 【即对别的属性添加read_only参数】
class BookInfoSerializer(serializers.ModelSerializer):"""图书数据序列化器"""class Meta:model = BookInfofields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')read_only_fields = ('id', 'bread', 'bcomment')
3. 添加额外参数
我们可以使用extra_kwargs参数为ModelSerializer添加或修改原有的选项参数
class BookInfoSerializer(serializers.ModelSerializer):"""图书数据序列化器"""class Meta:model = BookInfofields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')extra_kwargs = {'bread': {'min_value': 0, 'required': True},'bcomment': {'min_value': 0, 'required': True},}# BookInfoSerializer():
# id = IntegerField(label='ID', read_only=True)
# btitle = CharField(label='名称', max_length=20)
# bpub_date = DateField(allow_null=True, label='发布日期', required=False)
# bread = IntegerField(label='阅读量', max_value=2147483647, min_value=0, required=True)
# bcomment = IntegerField(label='评论量', max_value=2147483647, min_value=0, required=True)
模型类序列化器ModelSerializer相关推荐
- 四、模型类序列化器ModelSerializer
如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类. ModelSerializer与常规 ...
- Django框架(16.Django中的模型类管理器以及自定义管理器)
模型类.objects.all()->objects是一个什么东西呢? 答:objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询. objects是model ...
- 20-Django REST framework-Serializer序列化器
Serializer序列化器 前言 序列化器作用 定义Serializer 定义方法 字段与选项 创建Serializer对象 序列化使用 基本使用 增加额外字段 关联对象序列化 反序列使用 模型类序 ...
- Django 基础(13)-Django drf 序列化器类to_representation和to_internal_value(处理返回的日期格式)、序列化类 ModelSerializer
文章目录 一.Django drf 序列化 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSerializer 5. DRF序列化器to_representatio ...
- 快速上手Django(六) -Django之Django drf 序列化器Serializer类
文章目录 快速上手Django(六) -Django之Django drf 序列化器Serializer类 1. 背景 2. 使用思路 3. 代码demo 4. [重要]序列化类 ModelSeria ...
- drf序列化器-Serializer
Python之drf序列化器-Serializer 一.序列化器-Serializer的作用 序列化,序列化器会将模型类对象转化为字典,经过Response变成json字符串 反序列化,把客户发送过来 ...
- DRF序列化器详细使用
视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数据库进行改动,则需要拿到前端发来 ...
- odoo13中的模型类中的方法函数ORM方法以及模型方法的装饰器
1.模型类的方法函数(ORM方法) 方法 解释 create方法 记录创建方法.创建记录的orm函数. 页面新建点击保存时触发调用. 返回值为创建成功的记录集. write方法 记录更新方法.修改记录 ...
- django-模型类管理器
小结 模型类.objects.all可以查询出所有的数据 objects是什么 ? 它是一个模型类的管理器 本质是一个描述符,描述符是一个类属性的值是另一个类的实例化对象如何自定义模型类管理器的all ...
最新文章
- mooc python_MOOC python笔记(一):python语言概述
- 样式表(CSS:Cascading Style Sheets)简要教程[上]
- 6月开招|工业互联才是王道,最高可达50k!
- 认识高清视频编码(MPEG、H.264、WMV-HD、RMVB)
- python斐波那契数列30_python的30个骚操作
- 刹车时到底要不要踩离合器?
- CSAPP-C1-计算机系统漫游
- BZOJ4025 二分图
- Esxi 6.7u3 安装之重封装网卡驱动与NVME驱动
- Onenote插件,云扩容
- 如何让自己的CS水平更进一步?(二)了解武器
- OpenCV摄像头标定
- 多个blockquote_换句话说:使用blockquote,cite和q元素
- git小乌龟的安装和使用教程
- matlab收益率,债券价格与收益率的Matlab实现(10页)-原创力文档
- 在blog中添加attachments功能 (修改系统Control)
- 序列化字段的跨表查,choice字段显示中文,
- Flutter 图片组件Image、本地图片、远程图片、图片剪切、圆形图片
- 《第四周RFID作业》物联112118 林家辉
- 浪潮服务器怎么重做raid 、设置pxe 启动