自定义序列化器(序列化操作)——两个方向,三种形式(对应三种方案实现)

1、自定义序列化器:

  • (1)、定义一个BookInfo模型类的序列化器 —— 用来序列化/反序列化操作BookInfo模型类对象的
  • (2)、通过定义和模型类“同名类属性、类型一一对应”的形式,来指定参与序列化的字段
  • (3)、模型类隐藏字段也可以映射 —— 只要模型类有的字段都可以映射

新建一个serializers.py文件

from rest_framework import serializers
# serializers.Serializer: 该类,是所有自定义序列化器的基类

# 1、定义一个BookInfo模型类的序列化器 —— 用来序列化/反序列化操作BookInfo模型类对象的
class BookInfoSerializer(serializers.Serializer):
    # 2、通过定义和模型类“同名类属性、类型一一对应”的形式,来指定参与序列化的字段
    # 该指定,决定了序列化结果(字典)有哪些字段
    # 3、模型类隐藏字段也可以映射 —— 只要模型类有的字段都可以映射
    id = serializers.IntegerField()
    btitle = serializers.CharField()
    bpub_date = serializers.DateField()
    bread = serializers.IntegerField()
    bcomment = serializers.IntegerField()
    is_delete = serializers.BooleanField()
    image = serializers.ImageField()

2、标准序列化操作流程

  • (1)、获取目标数据(一个or多个模型类对象)
    • 单一对象:book = BookInfo.objects.get(pk=1)
    • 多个对象:books = BookInfo.objects.all()
  • (2)、实例化序列化器对象
    • 单一对象序列化的时候:bs = BookInfoSerializer(instance=book)
    • 多个对象序列化的时候:bs = BookInfoSerializer(instance=books, many=True)
      • many=True表示序列化操作传入的instance是一个查询集(多个对象)
  • (3)、序列化结果
    • 单一对象序列化结果(dict): bs.data
    • 多个对象序列化结果(OrderedDict): bs.data(注:OrderedDict是特殊的字典,操作和普通字典一样)
      序列化单一对象实例:
>>> from books_test.serializers import*
>>> from books_test.models import*
>>> book = BookInfo.objects.get(pk=1)
>>> bs = BookInfoSerializer(instance=book)
>>> bs.data
{'id': 1, 'bpub_date': '1980-05-01', 'image': None, 'btitle': '射雕英雄传', 'bcomment': 34, 'is_delete': False, 'bread': 100}
>>> 

3、如何序列化其他的隐藏字段呢?
3.1、前置条件 ——models.py模型类定义:
# related_name定义一个主表隐藏字段为heros代表从表英雄多个对象

#定义图
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值