模型类序列化器(代码片段)

chichung chichung     2023-01-16     669

关键词:

模型类序列化器

  1. DRF提供了模型类序列化器: ModelSerializer
  2. 作用: 简化对应django模型类的序列化器的定义

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

  • 基于模型类自动生成一系列字段
  • 基于模型类自动为 Serializer 生成 validators,比如字段唯一的校验器
  • 包含默认的 create() 和 update() 的实现

 

1. 定义

比如我们创建一个 DepartmentSerializer2

class DepartmentSerializer2(serializers.ModelSerializer):

    class Meta:
        model = Department    
        fields = __all__    # 包含模型类中所有的字段
  • model 指明参照哪个模型类
  • fields 指定序列化器中的属性有哪些 (可以是模型类中的字段,也可以模型类中没有的但需要校验的属性,比如类似:短信验证码,确认密码)

python console 交互环境中,查看生成的序列化器

>>> s = DepartmentSerializer2()
>>> s
DepartmentSerializer2():
    id = IntegerField(label=ID, read_only=True)
    name = CharField(label=部门名称, max_length=20)
    create_date = DateField(label=成立时间)
    is_delete = BooleanField(label=是否删除, required=False)

 

2. 指定字段

1) fields属性:指定序列化器中包含哪些字段,如下:

class DepartmentSerializer2(serializers.ModelSerializer):
    class Meta:
        model = Department
        fields = (id, name)

 

2) exclude属性:排除掉模型类中指定的字段

class DepartmentSerializer2(serializers.ModelSerializer):
    class Meta:
        model = Department
        exclude = (is_delete,)       # 注意:`exclude`不能与`fields`同时使用

 

3) 指明只读字段

可以通过 read_only_fields 指明只读字段,即 仅用于序列化输出,在反序列化时不会进行校验和修改

class DepartmentSerializer2(serializers.ModelSerializer):

    class Meta:
        model = Department
        fields = __all__
        read_only_fields = (id, create_date)  # 这些字段不能修改

 

4) 指定 关联属性的序列化方式

class EmployeeSerializer2(serializers.ModelSerializer): 
    # 1. 返回关联对象的主键
    department = PrimaryKeyRelatedField(read_only=True)
    # 2. 返回关联对象的字符串表示(即Department类的 __str__ 方法的返回值)
    # department = StringRelatedField(read_only=True)
    # 3. 返回关联对象序列化器定义的属性
    # department = DepartmentSerializer(read_only=True)

    class Meta:
        model = Employee
        fields = __all__

class DepartmentSerializer2(serializers.ModelSerializer):
    # 名字固定: 类名小写_set
    employee_set = PrimaryKeyRelatedField(read_only=True, many=True)
    # employee_set = StringRelatedField(read_only=True, many=True)
    # employee_set = EmployeeSerializer(read_only=True, many=True)

    class Meta:
        model = Department
        fields = __all__                             # ok
        # fields = (‘id‘, ‘name‘, ‘employee_set‘)    # ok
        # fields = (‘id‘, ‘name‘)                     # error

 

3. 添加额外参数: extra_kwargs 属性

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

class EmployeeSerializer2(serializers.ModelSerializer):

    class Meta:
        model = Employee
        fields = __all__
        extra_kwargs = 
            name: min_length: 5, max_length: 20,
            age: min_value: 1, max_value: 200,
        

# 结果如下:

EmployeeSerializer2():
    id = IntegerField(label=ID, read_only=True)
    name = CharField(label=姓名, max_length=20, min_length=5)
    age = IntegerField(label=年龄, max_value=200, min_value=1)
    gender = ChoiceField(choices=((0, ), (1, )), label=性别, required=False, 
             validators=[<django.core.validators.MinValueValidator object>, 
                         <django.core.validators.MaxValueValidator object>])
    salary = DecimalField(decimal_places=2, label=工资, max_digits=8)
    comment = CharField(allow_blank=True, allow_null=True, label=备注,             
                        max_length=300, required=False)
    hire_date = DateField(label=入职时间, read_only=True)
    department = PrimaryKeyRelatedField(label=所属部门, 
                                        queryset=Department.objects.all())

 

pythondjangorest_framework框架模型类序列化器(modelserializer)详解(图文并茂版)(代码片段)

模型类序列化器(ModelSerializer)详解介绍区别与优点定义模型类序列化器查看生成的模型序列化器使用模型类序列化器模型序列化器字段介绍上篇文章我们介绍了最基础的序列化器(serializers),pythonDjangoRest_Framework框架... 查看详情

09.drf-modelserializer(代码片段)

四、模型类序列化器ModelSerializer如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动... 查看详情

modelserializer组件(代码片段)

ModelSerializer组件一、DRF模型类序列化器如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型... 查看详情

drf框架之modelserializer序列化器(代码片段)

ModelSerializer是Serializer的子类,序列化和反序列化跟Serializer一样。ModelSerializer与常规的Serializer相同,但提供了:基于模型类自动生成一系列字段基于模型类自动为Serializer生成validators,比如unique_together包含默认的create()和update()的... 查看详情

serializer组件(代码片段)

Serializer组件一、序列化器-Serializer作用:1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型3.反序列化,完成数据... 查看详情

20-djangorestframework-serializer序列化器(代码片段)

Serializer序列化器前言序列化器作用定义Serializer定义方法字段与选项创建Serializer对象序列化使用基本使用增加额外字段关联对象序列化反序列使用模型类序列化器ModelSerializer指定字段前言本篇来学习Serializer序列化器知识序列化... 查看详情

快速幂||取余运算(代码片段)

序列化器-Serializer作用:1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型3.反序列化,完成数据校验功能定义序列... 查看详情

序列化器(serializers)(代码片段)

扩展序列化器的有用性是我们想要解决的问题。然而,这不是一个微不足道的问题,它将需要一些严肃的设计工作。——RussellKeith-Magee,Django用户组序列化器允许将复杂数据(如查询集和模型实例)转换为可以轻松渲染成 J... 查看详情

drf框架serializer之modelserializer(代码片段)

一、基本语法在没有使用ModelSerializer序列化器类之前,我们定义的序列化器类都需要添加对应模型类字段的很多字段,如果添加的字段特别多,那么势必会影响开发效率和代码的可读性,因此会选择一种更为简洁的序列化器类来... 查看详情

django数据库操作(代码片段)

...查4.1、一对多、多对一4.2、一对一4.3、多对多五、模型类序列化器5.1、序列化器介绍5.2、序列化器使用5.3、数据的拼接5.4、自定义序列化器实现添加修改 5.5、模型类序列化器一、Django/ORM框架介绍及配置1.1、ORM框架介绍ORM框架O... 查看详情

drf之序列化组件(代码片段)

1一序列化器-Serializer作用:1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型3.反序列化,完成数据校验功能1.1定... 查看详情

drf高级二序列化器(代码片段)

序言序列化器是drf非常好用的一个功能!美酒虽好,切莫贪杯。合适的位置做合适的事情。drf非常擅长列表类,非图表类。此时,基础的视图是一个比较好的选择。序列化器序列化分为正序列化和反序列化。正序列化:models对象... 查看详情

drf序列化组件(代码片段)

1序列化组件介绍1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型3.反序列化,完成数据校验功能2简单使用1写一... 查看详情

序列化器(serializers)(代码片段)

扩展序列化器的有用性是我们想要解决的问题。然而,这不是一个微不足道的问题,它将需要一些严肃的设计工作。——RussellKeith-Magee,Django用户组序列化器允许将复杂数据(如查询集和模型实例)转换为可以轻松渲染成 J... 查看详情

16-drf工程搭建与序列化器(代码片段)

...amework‘,]使用DjangoRESTframework快速实现图书的RESTAPI2、创建序列化器1、在Book应用下新建serializers.py用于保存该应用的序列化器,创建一个BookInfoSerializer用于序列化与反序列化。fromrest_frameworkimportserializersfromBook.modulesimportBookInfoclassB... 查看详情

序列化组件的基本使用(代码片段)

目录一、创建一个序列化器二、使用序列化器1修改数据2提交数据3校验数据3.1字段后添加参数校验3.2全局校验与局部校验3.3校验器三、模型类序列化器四、serializers高级用法1参数source2SerializerMethodField3many=True源码Q:序列化组件有... 查看详情

drf的序列化器(代码片段)

...由逗号分隔花括号保存对象方括号保存数组为什么要使用序列化器drf中的response方法只能接收json数格式,并将json数据解析为二进制格式发送给前端,也可以更以更方便的方法对数据进行验证以及数据库操作.序列化家族Serializer类,底... 查看详情

django模型-----模型成员(代码片段)

...jects:是Manager类型的对象,用于与数据库进行交互当定义模型类时没有指定管理器,则Django会为模型类提供一个名为objects的管理器支持明确指定模型类的管理器classBookInfo(models.Model):...books=models.Manager()当为模型类指定管理器后,... 查看详情