ModelSerializer是Serializer的子类,序列化和反序列化跟Serializer一样。
ModelSerializer与常规的Serializer相同,但提供了:
- 基于模型类自动生成一系列字段
- 基于模型类自动为Serializer生成validators,比如unique_together
- 包含默认的create()和update()的实现
在使用ModelSerializer序列化器时,我们只需要定义好序列化器类,并指定好对应的模型类和字段即可。
例如:
# 定义ModelSerializers序列化器 class BookInfoModelSerializer(serializers.ModelSerializer): '''定义图书信息的ModelSerializers序列化器''' Meta: 指定序列化器对应的模型类 model = 模型类名 model = BookInfo 指定序列化和反序列化操作的字段 fields = '__all__' __all__表示所有字段进行序列化
Shell测试代码:
>>> from booktest.serializers import BookInfoModelSerializer >>> s = BookInfoModelSerializer() >>> s BookInfoModelSerializer(): id = IntegerField(label=ID',read_only=True) btitle = CharField(label=名称) bpub_date = DateField(label=发布日期') bread = IntegerField(label=阅读量False) bcomment = IntegerField(label=评论量False) is_delete = BooleanField(label=逻辑删除创建ModelSerializer序列化器类对模型类中所有字段都进行序列化和反序列化操作。
我们通过设置Meta类中的fields属性的值可以指定序列化器能够操作的字段数据。
当fields='__all__'时,表示序列化器能够对模型类中的所有字段数据进行序列化与反序列化的操作。对全部字段进行序列化和反序列化操作 fields = __all__表示所有字段进行序列化shell测试代码:
我们可以通过Shell代码看到能够进行序列化和反序列化操作的字段,并且能够发现,ModelSerializer序列化器已经自动地为我们创建好了模型字段和约束条件。
>>> BookInfoModelSerializer >>> s =对模型类中特定的字段进行序列化和反序列化操作。当fields = (‘字段1’,...)时,表示当前的序列化器只能对元组中的字段进行序列化与反序列化操作。
ModelSerializers序列化器 指定序列化器对应的模型类 model = 对指定字段进行序列化和反序列化操作 fields = (breadbtitlebcomment')Shell测试代码:
>>> BookInfoModelSerializer >>> s = s BookInfoModelSerializer(): btitle = CharField(label=指定模型类中不能被序列化和反序列化的字段。在Meta类中,我们也可以通过指定exclude属性的值,来设置不能够被当前序列化器进行序列化与反序列化的字段数据。
指定不进行序列化和反序列化操作的字段 exclude = (id>>> BookInfoModelSerializer >>> s =指定关联字段因为ModelSerializer序列化器时Serializer的子类,所以Serializer序列化能够进行的事ModelSerializer序列化器也能够进行。
在ModelSerializer序列化器中,我们也需要追加关联字段来实现关联序列化操作,并且关联方式与Serializer序列化器一致。
HeroInfoModelSerializer(serializers.ModelSerializer): 定义查询Hero信息的ModeleSerializer序列化器 添加关联字段(多对一) hbook = BookInfoModelSerializer() 指定模型类 model = HeroInfo 指定字段 fields = (hnamehbook HeroInfoModelSerializer >>> s = HeroInfoModelSerializer() >>> s HeroInfoModelSerializer(): id = IntegerField(label=True) hname = CharField(label=) hbook = BookInfoModelSerializer(): id = IntegerField(label=True) btitle = CharField(label=) bpub_date = DateField(label=) bread = IntegerField(label=False) bcomment = IntegerField(label=False) is_delete = BooleanField(label=指定只读字段在ModelSerializer序列化器中,我们可以通过在Meta类中,指定read_only_fields属性的值来设置只读字段。
__all__表示所有字段进行序列化 定义只读字段 read_only_fields = (为指定字段添加验证参数在ModelSerializer序列化器中,我们可以通过在Meta类中,指定extra_kwargs属性的值来为指定的字段添加验证参数。
这里,我们需要注意的时extra_kwargs属性的值个格式是个字典。
extra_kwargs = { 字段名:{ 验证选项':验证条件,} }案例代码:
添加字段验证选项 extra_kwargs = { :{ min_value:0,max_value':99999 } }Shell测试代码:
>>> BookInfoModelSerializer,HeroInfoModelSerializer >>> s =版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。
相关推荐
- • 一次彻底讲清如何处理mysql 的死锁问题
- • MySQL 通过 Next-Key Locking 技术(行
- • 一文彻底弄懂mysql的事务日志,undo lo
- • Linux系统控制文件 /etc/sysctl.conf详
- • linux命令useradd添加用户详解
- • vi 和vim 的区别
- • Linux系统下如何监测磁盘的使用空间
- • linux中查看和开放端口
- • Linux设置开放一个端口
- • linux之ftp命令详解
- • linux系统下实时监控进程以及定位杀死挂
- • Linux下安装jdk8的方法
- • 阿里云被挖矿进程wnTKYg入侵的解决方法
- • 莫小安 CentOS7使用firewalld打开关闭防
- • Linux中more和less命令用法
- • linux系统里/opt目录和/usr/local目录的
- • 如何使用Siege进行压测?
- • 本地访问服务器的nacos地址