zoukankan      html  css  js  c++  java
  • Django day25 序列化组件(*****)

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

    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)



  • 相关阅读:
    angularjs+ionic的app端分页和条件
    js中对象的自定义排序
    angularJS入门笔记
    SpringBoot学习历程
    页面渲染流程
    跨域问题
    jquery知识点结合使用
    对bootstrap模态框的小尝试
    登录页面两端对齐的样式问题
    输入两个数字,将比较结果输出到页面
  • 原文地址:https://www.cnblogs.com/zedong/p/10103988.html
Copyright © 2011-2022 走看看