前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF中ModelSerializer的使用

DRF中ModelSerializer的使用

作者头像
zy010101
发布2021-12-10 17:39:32
4270
发布2021-12-10 17:39:32
举报
文章被收录于专栏:程序员程序员

ModelSerializer

DRF的serializers.Serializer所生成的序列化器是最基本的,它可以为数据库模型类定义,也可以为非数据库模型类的数据定义。一般而言,我们使用序列化器对应的都是Django的数据库模型类。DRF为我们提供了ModelSerializer来方便的对应于一个models.

ModelSerializer基于模型类自动生成一系列字段;此外还提供了create()和update()的默认实现。

下面定义新的序列化器,它将继承自ModelSerializer类。

代码语言:javascript
复制
class BookInfoSerializer2(serializers.ModelSerializer):
    """继承自serializers.ModelSerializer"""
    class Meta:
        model = BookInfo        # model 指明生成哪个模型类的序列化器
        fields = '__all__'      # fields 指明为模型类的哪些字段被序列化

在终端中查看自动生成的序列化器如下:

代码语言:javascript
复制
>>> from apps.book.serializers import BookInfoSerializer2
>>> BookInfoSerializer2()
BookInfoSerializer2():
    id = IntegerField(label='ID', read_only=True)
    name = CharField(label='名称', max_length=20)
    pub_date = DateField(label='发布日期')
    readcount = IntegerField(label='阅读量', max_value=2147483647, min_value=-2147483648, required=False)
    commentcount = IntegerField(label='评论量', max_value=2147483647, min_value=-2147483648, required=False)
    is_delete = BooleanField(label='逻辑删除', required=False)
    image = ImageField(allow_null=True, label='图片', max_length=100, required=False)

下面贴上model类的定义。

代码语言:javascript
复制
class BookInfo(models.Model):
    """书籍信息模型"""
    name = models.CharField(max_length=20, verbose_name='名称') #图书名称
    pub_date = models.DateField(verbose_name='发布日期') #发布日期
    readcount = models.IntegerField(default=0, verbose_name='阅读量') #阅读量
    commentcount = models.IntegerField(default=0, verbose_name='评论量') #评论量
    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') #逻辑删除
    image = models.ImageField(upload_to='book/', verbose_name='图片', null=True)

通过观察模型类和序列化器类,我们可以发现一些规律。 id是模型类默认生成的主键,序列化器让其变成只读(只能序列化,不能反序列化);通过name字段,可以发现模型类的verbose_name变成了序列化器中的label,max_length等对应不变;观察readcount字段,会发现整形类型会被序列化器自动加上max_value和min_value的限制;有默认值的字段,会自动加上required=False来取消限制;而允许为空的字段则会字段添加allow_null=True和required=False.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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