DRF中ModelSerializer的使用
2023-04-18 14:40:43 时间
ModelSerializer
DRF的serializers.Serializer所生成的序列化器是最基本的,它可以为数据库模型类定义,也可以为非数据库模型类的数据定义。一般而言,我们使用序列化器对应的都是Django的数据库模型类。DRF为我们提供了ModelSerializer来方便的对应于一个models.
ModelSerializer基于模型类自动生成一系列字段;此外还提供了create()和update()的默认实现。
下面定义新的序列化器,它将继承自ModelSerializer类。
class BookInfoSerializer2(serializers.ModelSerializer):
"""继承自serializers.ModelSerializer"""
class Meta:
model = BookInfo # model 指明生成哪个模型类的序列化器
fields = '__all__' # fields 指明为模型类的哪些字段被序列化
在终端中查看自动生成的序列化器如下:
>>> 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类的定义。
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.
相关文章
- HUAWEI交换机如何判断环路故障
- HUAWEI防火墙通过L2TP隧道让外出员工访问公司内网的各种资源
- HUAWEI防火墙通过IPSec隧道使总部与分部在多业务场景下实现业务隔离互访
- HUAWEI防火墙通过IPSec隧道使总部与分公司的用户可互相访问(采用预共享密钥认证)
- HUAWEI防火墙双出口据链路带宽负载分担
- HUAWEI防火墙双出口根据链路优先级主备备份
- HUAWEI防火墙双出口环境下私网用户通过NAPT访问Internet
- 如何实现IP话机接入交换机?
- WLAN-AC+AP射频一劳永逸的调优方式
- 中大型企业有线无线用户统一接入(实施笔记)
- 常见大中型网络WLAN基本业务实例
- 网络安全之IPSG防止DHCP动态主机私自更改IP地址
- 详述网络中ARP安全的综合功能
- 配置OSPF负载分担
- IPv4静态路由与NQA联动
- 静态路由实现路由负载分担
- 静态路由实现主备备份
- MSTP+VRRP组合组网
- VRRP组网下同网段内配置基于全局地址池的DHCP服务器
- 路由器/交换机Console口登录密码丢失后如何恢复