Django day25 序列化组件(*****)

本文深入讲解了序列化组件的功能及使用方法,包括序列化的基本概念、Serializer组件的应用场景与操作方式,以及ModelSerializer的配置与实例化技巧。通过具体示例,读者可以了解如何在模型表中重写__str__方法,如何利用source属性指定字段或方法,以及如何使用SerializerMethodField自定义序列化字段。

序列化:将变量从内存中存储或传输的过程称之为序列化

1、序列化组件是干什么用的?

   对应着表,写序列化的类

2、如何使用序列化组件
  Serializer
    1) 重命名:用source:xx = serializers.CharField(source='name')
    2) 取出出版社名字:

from rest_framework import serializers 
  方式一:    
# 在模型表中重写__str__方法: publish=serializers.CharField()   方式二:     # 用source,例:拿出出版社的城市          publish=serializers.CharField(source='publish.city')

如果不指定source,字段必须对应起来,如果指定了source,字段可以任意命名

    3)使用:

      实例化产生一个对象(传参数)
      对象.data ---》拿到字典


3、(其他)source:可以指定字段,也可也指定方法

# publish.test这是个方法,会执行该方法,并拿到返回结果
test = serializers.CharField(source='publish.test')

  必须要写一个方法预制对应
  get_字段名(self,obj对象)
    # 写一些逻辑
    # 也可以用序列化的类,继续序列化别的对象
    return ''

 

3、 SerializerMethodField,可以指定一个方法

publish=serializers.SerializerMethodField()
# 方法名:叫get_字段名,要传参数,参数是:当前book对象
def get_publish(self,obj):
    # obj 是当前book对象
    dic={'name':obj.publish.name,'email':obj.publish.email}
    return dic

方法内部可以继续用其他的序列化类

 

4、ModelSerializer:定义一个类,必须在类中写

class Meta:
    model=指定表
    # fields = '__all__'
    # 指定只取这两个字段
    fields = ['nid','name']
    # 去掉指定的字段
    # exclude=['publish','authors']
    # fields,跟exclude不能连用
    # 指定深度,就是跨几个表(官方建议小于10,我给你的建议小于3)
    # depth = 2

  5、实例化传参数的时候,可以按关键字传:

BookSerializer(instance='可以是queryset对象,也可以是单个对象',many=True/False)

 



转载于:https://www.cnblogs.com/zedong/p/10103988.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值