您现在的位置是:亿华云 > 系统运维

DRF 中的模型序列化到底该怎么用?

亿华云2025-10-03 06:19:16【系统运维】4人已围观

简介本文转载自微信公众号「AirPython」,作者星安果。转载本文请联系AirPython公众号。1. 前言大家好,我是安果!接下来,将通过几篇文章将对 DRF 模型序列化进行展开说明,详情谈谈模型序列

本文转载自微信公众号「AirPython」,模到底作者星安果。型序转载本文请联系AirPython公众号。列化

1. 前言

大家好,该用我是模到底安果!

接下来,将通过几篇文章将对 DRF 模型序列化进行展开说明,型序详情谈谈模型序列化的列化作用、步骤及进阶用法

2. 模型序列化的该用作用?

作为 DRF 中非常关键的一步,模型序列化主要作用有 3 个

序列化数据

用于将模型序列化成 JSON 格式的模到底对象,便于数据返回

表单验证

在表单请求中,型序用于验证用户上传的列化数据是否满足项目要求

数据操作

可用于数据更新、数据创建、该用数据保存等

3. 表单字段验证

指定需要序列化的模到底字段时,可以设置字段类型、站群服务器型序默认值、列化可读或可写、验证错误提示信息等,然后针对表单字段进行验证

表单字段验证同样有 3 种方式,分别对应:

3-1 序列化字段,使用参数形式进行制定

比如,字段 name 数据类型为字符串,max_length 指定最大长度,必须输入,并使用「 error_messages 」设置验证失败的提示信息

# 最大长度50 # required=True:必须输入 # 如果不传递,则报错:name必须要传递 name = serializers.CharField(max_length=50, required=True, error_messages={ "required": "name必须要传递"}) 

3-2 重写 validate( self , attrs ) 方法进行验证

参数 attrs 包含所有字段

我们只需要自定义验证逻辑,如果验证不通过,抛出「 serializers.ValidationError 」异常即可

比如,这里验证 name 中必须包含关键字「 深圳 」,否则抛出异常(代表验证失败)

def validate(self, attrs):     """     表单数据验证     :param attrs:     :return:     """     print(attrs)     if "深圳" not in attrs.get("name"):         raise serializers.ValidationError(名称中没有包含【深圳】,验证失败!)     return attrs 

3-3 重写 validate_字段名(self,value) 方法

单独针对某个字段进行验证

比如,我们还是对 name 字段进行验证,如果验证不通过,云南idc服务商主动抛出「 serializers.ValidationError 」异常即可

def validate_name(self, name):     """     对name字段进行验证     :param name:      :return:      """     if "深圳" not in name:         raise serializers.ValidationError(名称中没有包含【深圳】,验证失败!)     return name 

4. 重写创建、更新方法

创建的序列化类继承于 serializers.Serializer 类

这里重写 update() 和 create() 函数

其中,

update( self, instance, validated_data )

用于更新数据,将参数 validated_data 中的数据更新到 instance 中

create(self, validated_data)

validated_data 作为关键字参数,用于创建模型

class GoodsSerializer(serializers.Serializer):     # 需要序列化的字段     # 注意:自动生成的字段,只会涉及读取的场景     id = serializers.IntegerField(read_only=True)     # error_messages:定义错误信息     name = serializers.CharField(max_length=200, required=True, error_messages={ "required": "name参数必须要传递"})     def update(self, instance, validated_data):         """         更新数据,将validated_data中的数据更新到instance中         :param instance:         :param validated_data:         :return:         """         # 修改数据         instance.name = validated_data.get("name", instance.name)         # 保存更新         instance.save()         return instance     def create(self, validated_data):         """         创建数据         :param validated_data:         :return:         """         # Goods:模型         return Goods.objects.create(**validated_data) 

5. 最后

本章讲到模型普通序列化的步骤,关于模型序列化、序列化嵌套、项目实战中流程,我将在下一篇文章进行说明。

源码下载

很赞哦!(743)