首页 > 其他分享 >django-rest-framework-从零开始-3-序列化类ModelSerializer的使用

django-rest-framework-从零开始-3-序列化类ModelSerializer的使用

时间:2023-03-20 12:01:20浏览次数:52  
标签:ModelSerializer rest label student serializers 序列化 serializer

django-rest-framework-从零开始-3-序列化类ModelSerializer的使用

1、前言

我们之前提到创建序列化类,需要继承serializers.Serializer类,然后映射模型类的字段,然后重写create方法和update方法。这样的代码,看起来映射字段有一些重复代码,而且createupdate方法,遇到一个模型,需要重写一次,太麻烦了。

因此,我们可以使用serializers.ModelSerializer类代替serializers.Serializer

2、使用ModelSerializer类代替Serializer

  • 重写student_manager/serializers.py文件中的StudentSerializer
class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = '__all__'

图示

image-20230316155825121

  • 查看自动生成的序列化类

    student_manager/debug_student_serializer.py中添加以下代码

    def show_serializer():
        serializer = StudentSerializer()
        print(f"serializer:{serializer}")
    

图示

image-20230316160628845

运行后

serializer:StudentSerializer():
    id = IntegerField(read_only=True)
    student_id = CharField(help_text='学号最大长度为30', label='学号', max_length=30, validators=[<UniqueValidator(queryset=Student.objects.all())>])
    student_name = CharField(help_text='学号最大长度为30', label='姓名', max_length=30)
    student_sex = ChoiceField(choices=[(1, '男'), (0, '女')], help_text='1->男,0->女', label='性别')
    student_birthday = DateField(help_text='学生生日', label='生日')
    created = DateTimeField(label='创建时间', read_only=True)
    updated = DateTimeField(label='修改时间', read_only=True)

image-20230316160249218

说明:

  • 通过Meta类中的model指定要序列化的模型类即可

  • 完美的把模型类搬过来了,还添加了唯一属性校验器,帮助信息,标签等信息,比自己手动写序列化类方便多了,同时还重写了create方法和update方法,直接在源代码中就可以看到。

github:https://github.com/rainbow-tan/learn-drf

标签:ModelSerializer,rest,label,student,serializers,序列化,serializer
From: https://www.cnblogs.com/rainbow-tan/p/17235833.html

相关文章

  • django-rest-framework-从零开始-2-序列化类serializers.Serializer的使用
    django-rest-framework-从零开始-2-序列化类serializers.Serializer的使用1、前言我们编写的django程序,需要与前端或者其他程序交互,通常会提供出自己的API接口,此时需要把......
  • PHP 将空数组统一 json 序列化为 [] 的弊端
    在PHP中表示空的map或空数组都是以空数组形式,在转化为json数据时,会将空数组统一json序列化成 ​​[]​​,这样就存在一个类型问题。以前我们在与前端交互时一般是与弱类......
  • Spring Boot @RestControllerAdvice注解详解
    一、@RestControllerAdvice注解的基础使用我们先来看一下@RestControllerAdvice注解的基本使用方法。在SpringBoot项目中,可以通过在类上添加@RestControllerAdvice......
  • Presto-gateway 讲解与实战操作
    目录一、概述二、部署mysql三、部署多套presto集群四、部署presto-gateway与简单使用1)下载2)Maven编译3)修改配置4)sql初始化5)启动服务6)增加和修改presto集群1、通过CU......
  • 使用keydb 简化redis openresty 集成
    openresty支持redis的链接管理以及api集成能力是一个很不错的功能,基于keydb的多活模式可以简化redis的维护同时结合haproxy可以解决负载的问题参考玩法  ......
  • 第三方接口的熔断方案(openresty)
    背景很多项目都需要调用到第三方的接口,曾经就有调用第三方接口慢,大量超时响应的请求不断堆积,造成服务不可用,间接堵塞了我司服务的整条依赖链,最后导致整个业务系统雪崩。不......
  • database Rest API项目 pREST 介绍
    开源databaseRestAPI服务项目在前后端分离的背景下,对于一些小型项目,其实后端可以做的非常轻,只要它能提供一些基础的restapi,逻辑完全可以在前端实现,尤其是使......
  • 【SpringMVC整合MyBatis】springmvc对RESTful支持
    1.什么是RESTfulRESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。RES......
  • day06-静态资源访问&Rest风格
    SpringBoot之静态资源访问&REST风格请求1.SpringBoot静态资源访问1.1基本介绍只要静态资源是放在类路径下的:/static、/public、/resources、/META-INF/resources,则可......
  • django序列化多对多字段设置为空时需要在模型表多对多字段加blank=True这个参数
    menus=models.ManyToManyField(to='Menu',db_table='lqz_roles_menus',blank=True)如果不写在存空列表的时候会报错写了......