前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模型类序列化器ModelSerializer

模型类序列化器ModelSerializer

作者头像
小闫同学啊
发布2019-07-18 11:33:48
6100
发布2019-07-18 11:33:48
举报
文章被收录于专栏:小闫笔记

模型类序列化器ModelSerializer

如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。

ModelSerializer与常规的Serializer相同,但提供了:

  • 基于模型类自动生成一系列字段
  • 包含默认的create()和update()的实现

1. 定义

比如我们创建一个BookInfoSerializer

代码语言:javascript
复制
class BookInfoSerializer(serializers.ModelSerializer):
   """图书数据序列化器"""
   class Meta:
       model = BookInfo
       fields = '__all__'
  • model 指明参照哪个模型类
  • fields 指明为模型类的哪些字段生成

我们可以在python manage.py shell中查看自动生成的BookInfoSerializer的具体实现

代码语言:javascript
复制
>>> 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__表名包含所有字段,也可以写明具体哪些字段,如

代码语言:javascript
复制
class BookInfoSerializer(serializers.ModelSerializer):
   """图书数据序列化器"""
   class Meta:
       model = BookInfo
       fields = ('id', 'btitle', 'bpub_date')

2) 使用exclude可以明确排除掉哪些字段

代码语言:javascript
复制
class BookInfoSerializer(serializers.ModelSerializer):
   """图书数据序列化器"""
   class Meta:
       model = BookInfo
       exclude = ('image',)

3) 显示指明字段,如:

代码语言:javascript
复制
class HeroInfoSerializer(serializers.ModelSerializer):
   hbook = BookInfoSerializer()
    class Meta:
       model = HeroInfo
       fields = ('id', 'hname', 'hgender', 'hcomment', 'hbook')

4) 指明只读字段

可以通过read_only_fields指明只读字段,即仅用于序列化输出的字段

代码语言:javascript
复制
class BookInfoSerializer(serializers.ModelSerializer):
   """图书数据序列化器"""
   class Meta:
       model = BookInfo
       fields = ('id', 'btitle', 'bpub_date', 'bread', 'bcomment')
       read_only_fields = ('id', 'bread', 'bcomment')

3. 添加额外参数

我们可以使用extra_kwargs参数为ModelSerializer添加或修改原有的选项参数

代码语言:javascript
复制
class BookInfoSerializer(serializers.ModelSerializer):
   """图书数据序列化器"""
   class Meta:
       model = BookInfo
       fields = ('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)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模型类序列化器ModelSerializer
    • 1. 定义
      • 2. 指定字段
        • 3. 添加额外参数
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档