DRF序列化和反序列化(二:ModelSerializer)

一: rest_framework 中 serializers.Serializer的不方便之处(以下简称Serializer)

a:需要定义每一个字段,并且这个字段是和models字段及其类似。

b:和froms是不是很像,有没有类似ModelFroms类似的模块,简化字段的编写,当然有ModelSerializer就是这中类型

二:ModelSerializer序列化

a:view中的文件不需要修改

b:重新编写BookSerializers继承serializers.ModelSerializer

--model 指定哪一个model

--fields 表示需要序列化的字段,"__all__"全部字段

--depth 向下查找一层。指对外键关系会继续遍历外键对象的全部属性。(但是如果外键表字段过多,而前端需要的字段并不是很多,使用起来会不方便。所以常常不用)

class  BookSerializers(serializers.ModelSerializer):
    class  Meta:
        model = Book

        # fields=[‘title‘,‘category‘,‘publisher‘,‘authon‘]   #可以对字段进行排序
        fields="__all__"                                     #所有的字段,但是无序
        depth=1     #向下查找一层

c:对部分字段,如外键,choices字段,进行自定义序列化

--需要结合反序列化一起使用

class  BookSerializers(serializers.ModelSerializer):
    #部分字段自定义  字段定义后 fields字段一定要展现
    category_display = serializers.CharField(source="get_category_display",read_only=True)

    ##处理一对多关系  调用SerializerMethodField()方法
    publisher_id = serializers.SerializerMethodField(read_only=True)
    def get_publisher_id(self,obj):
        publisher_obj =obj.publisher
        return {"id":publisher_obj.id,"title":publisher_obj.title}
    #处理多对多
    authons = serializers.SerializerMethodField(read_only=True)
    def get_authons(self,obj):
        authon_query_list=obj.authon.all()
        return [{"id":authon_query.id,"name":authon_query.name}for authon_query in authon_query_list]

    class  Meta:
        model = Book

        # fields=[‘title‘,‘category‘,‘publisher‘,‘authon‘]   #可以对字段进行排序
        fields="__all__"                                     #所有的字段,但是无序

        #depth=1     #向下查找一层

三:ModelSerializer反序列化

--extra_kwargs字段设置对应的字段反序列化

--提交的数据,和models字段一样。外键关系传递id即可

--会自动添加数据

 class  Meta:
        model = Book

        # fields=[‘title‘,‘category‘,‘publisher‘,‘authon‘]   #可以对字段进行排序
        fields="__all__"                                     #所有的字段,但是无序

        #设置反序列化的字段  write_only
        extra_kwargs={
            ‘category‘:{‘write_only‘:True},
            ‘publisher‘: {‘write_only‘:True},
            ‘authon‘: {‘write_only‘:True},
        }

四:路由分发注意点

a:path(‘retrieve/<int:pk>‘,views.BookEditView.as_view())       #id修改成pk 

五:序列化小结

 

原文地址:https://www.cnblogs.com/yingjp/p/10604201.html

时间: 2024-08-30 04:46:08

DRF序列化和反序列化(二:ModelSerializer)的相关文章

drf序列化与反序列化

序列化器-Serializer 定义序列化器 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer. 例如,我们已有了一个数据库模型类BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称') bpub_date = models.DateField(

drf序列化器与反序列化

什么是序列化与反序列化 """ 序列化:对象转换为字符串用于传输 反序列化:字符串转换为对象用于使用 """ drf序列化与反序列化 """ 序列化:Model类对象转换为字符串用于传输 反序列化:字符串转换为Model类对象用于使用 """ Model类 创建数据库:终端 >: mysql -uroot -p密码 >: create database 数据库名 charse

drf 序列化模块03

新建项目准备 import sys # 标准输出流 sys.stdout.write('123\n') sys.stdout.write('456\n') sys.stdout.write('sdkfhsd四大皆空分段函数\n') # 标准输入流 res = sys.stdin.readline() # 运行后在终端可输入内容以绿色显示 print(res) # 标准错误流 sys.stderr.write('abc') # 在终端以红色字体显示括号内的内容 sys.stderr.write('

DRF框架(三)——media资源路径设置、多表序列化(ModelSerializer)、多表反序列化、多表序列化与反序列化整合(重点)

media资源路径设置  (设置好后把图片放在这个文件夹中,通过链接能访问到图片) 1.先在根目录设置一个media文件夹 2.配置settings.py,加上下面的 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 3.在urls.py路由设置 from django.views.static import serve from django.conf import settings urlpatterns =

DRF一对多序列化和反序列化

DRF一对多序列化和反序列化 models.py # 商品分类 class Category(models.Model): name = models.CharField(max_length=32) # 商品 class Goods(models.Model): name = models.CharField(max_length=32) price = models.DecimalField(max_digits=9,decimal_places=2) cate = models.Forei

DRF 一对多序列化与反序列化

DRF 一对多序列化与反序列化 序列化 出库的过程,是从数据库中把数据读出并以json的形式供前端使用 反序列化 入库的过程,是从前端将数据传入到views.py的函数或者类中,经过后台逻辑处理,最终写到数据库中. 安装 djangorestframework pip install djangorestframework 注册到INSTALL_APPS中 INSTALLED_APPS = [ ... 'rest_framework', ] 配置数据库 DATABASES = { 'defaul

内部类,drf响应类,序列化与反序列化

内部类 # 概念:将类定义在一个类的内部,被定义的类就是内部类 # 特点:内部类及内部类的所以名称空间,可以直接被外部类访问的 # 应用:通过内部类的名称空间,给外部类额外拓展一些特殊的属性(配置),典型的Meta内部类 - 配置类 class Book(model.Model): class Meta: db_model = "owen_book" # 配置自定义表名 class BookSerializer(serializers.ModelSerializer): class M

drf序列化高级、自定义只读只写、序列化覆盖字段、二次封装Response、数据库查询优化(断关联)、十大接口、视图家族、自动补全图片链接

目录 自定义只读 自定义只写 序列化覆盖字段 二次封装Response 数据库关系分析 断外键关联关系 ORM操作外键关系 ORM四种关联关系 基表 序列化类其他配置(了解) 十大接口 BaseSerializer初始化方法 十大接口序列化总结 单查群查 单增群增 单删群删 单整体改/群整体改 单局部改/群局部改 群增群改配置 十大接口小结 字段提供就校验,不提供拉到 DjangoORM内置优化机制:一次最多查21条数据 models.py response.py serializers.py

Java 序列化和反序列化(二)Serializable 源码分析 - 1

目录 Java 序列化和反序列化(二)Serializable 源码分析 - 1 1. Java 序列化接口 Java 序列化和反序列化(二)Serializable 源码分析 - 1 在上一篇文章中讲解了一下 Serializable 的大致用法,本节重点关注 Java 序列化的实现,围绕 ObjectOutputStream#writeObject 方法展开. 1. Java 序列化接口 Java 为了方便开发人员将 Java 对象进行序列化及反序列化提供了一套方便的 API 来支持.其中包