序列化

  • 定义模型类
from django.db import models

# Create your models here.

class StuModel(models.Model):
SEX_CHOICES = (
(0, '女'),
(1, '男'),
) name = models.CharField(max_length=10)
sex = models.SmallIntegerField(choices=SEX_CHOICES, null=True)
group = models.ForeignKey('Group', on_delete=models.SET_NULL, null=True)
role = models.ManyToManyField('Roles') class Group(models.Model):
name = models.CharField(max_length=10) class Roles(models.Model):
name = models.CharField(max_length=10)
  • 视图函数
from django.shortcuts import render

# Create your views here.

from rest_framework import serializers
from rest_framework.views import APIView
from .models import *
from django.http import HttpResponse import json class MySerializer(serializers.Serializer):
name = serializers.CharField() # 普通查询
sex_field = serializers.IntegerField(source='sex') # 更改名称查询
sex = serializers.CharField(source='get_sex_display') # 内嵌chiose查询
group = serializers.CharField(source='group.name') # 关联查询
rol = serializers.SerializerMethodField() # manyToMany查询 def get_rol(self, row):
queryset = row.role.all()
resp = []
for item in queryset:
resp.append(
{
'id': item.id,
'name': item.name
},
)
return resp class MyView(APIView): def get(self, request):
queryset = StuModel.objects.all()
serializer = MySerializer(instance=queryset, many=True)
ret = json.dumps(serializer.data)
return HttpResponse(ret)
  • 自定义序列化对象

    • 自定义的序列化对象必须继承serializers.Serializer
    • 该序列化对象的字段名和类型要和所要系列化的对象的一样
      • 如果要自定义字段名,需要在类型里面加上source=数据库的字段名
      • 多对多查询需要将字段对用成SerializerMethodField的类实例

        -定义get_{field_name}的方法,在里面实现自定义的查询
    • 自定义序列化对象实例化时,将所要序列化对象的queryset对象赋值给instance属性,当queryset对象不止一个时,many=True
  • 模型序列化对象

class MySerializer(serializers.ModelSerializer):
# name = serializers.CharField() # 普通查询
# sex_field = serializers.IntegerField(source='sex') # 更改名称查询
# sex = serializers.CharField(source='get_sex_display') # 内嵌chiose查询
group = serializers.CharField(source='group.name') # 关联查询
rol = serializers.SerializerMethodField() # manyToMany查询 class Meta:
model = StuModel
fields = ['name', 'sex_field', 'sex', 'group', 'rol']
extra_kwargs = {
'sex_field': {'source': 'sex'},
'sex': {'source': 'get_sex_display'},
} def get_rol(self, row):
queryset = row.role.all()
resp = []
for item in queryset:
resp.append(
{
'id': item.id,
'name': item.name
},
)
return resp
  • 模型序列化需要继承ModelSerializer

  • 可以在extra_kwargs定制额外的属性,参考Serializer

  • 在Meta里面制定对应的模型和字段,但ModelSerializer只能实现简单的展示,复杂的展示还需要自己定制

  • depth:深度追踪

class MySerializer(serializers.ModelSerializer):

    class Meta:
model = StuModel fields = '__all__'
depth = 1 class MyView(APIView): def get(self, request):
queryset = StuModel.objects.all()
serializer = MySerializer(instance=queryset, many=True)
ret = json.dumps(serializer.data)
return HttpResponse(ret)

在Meta里面加上加上depth = 1,就可以去取它对应的关联表的的下一层的所有数据,depth为几就去找几层

rest_framework-序列化-1的更多相关文章

  1. django rest_framework 序列化组件详解

    为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...

  2. rest_framework序列化组件

    一.Django自带的序列化组件  ==>对象序列化成json格式的字符串 from django.core import serializers from django.core import ...

  3. rest_framework序列化,反序列化

    序列化组件 from rest_framework.response import Response1.Response本质也是继承了httpresponse,比httpResponse还强大,传入一 ...

  4. rest_framework 序列化篇

    感谢alex和武沛齐老师 rest_framework中的序列化表示 from rest_framework import serializersclass RoleSerializer(serial ...

  5. rest_framework序列化

    1.序列化 1)拿到queryset 2)将queryset 给序列化类 serializer = IdcSerializer(idc)    #单个对象 serializer = IdcSerial ...

  6. 【Django】rest_framework 序列化自定义替换返回值

    # 序列化设置 class PagerSerialiser(serializers.ModelSerializer): name = serializers.CharField(source=&quo ...

  7. django rest_framework Serializers 序列化组件

    为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...

  8. rest_framework之序列化组件

    什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有form组件帮我们去做数据校验 我们有模板语法,从数据库取出的queryset对象不需要人为去转格式 当我们写前后端分离项 ...

  9. drf序列化组件

    rest_framework序列化之Serializer 步骤: 1.自定义一个类,继承Serializer类: 2.在类中写要序列化的字段: 3.使用:在views.py文件中,book_ser=B ...

  10. Serializers 序列化组件

    Serializers 序列化组件   为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转 ...

随机推荐

  1. JS高精度乘法计算问题(牛客网乘法-求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题)

    用到的知识点===> toFixed(num); toFixed() 方法可把 Number 四舍五入为指定小数位数的数字; 参数num: 代表小数位数: 例:var num = 5.56789 ...

  2. (转)bss段和.data的是是非非

    原文地址:http://zqwt.012.blog.163.com/blog/static/12044684201101214457186/ 一般情况下,一个程序本质上都是由 bss段.data段.t ...

  3. java常用日期类总结

    java 常用的日期类有三个Date.SimpleDateFormat.Calendar

  4. centOS6.5桌面版用不了中文输入法解决方案

    1:centos6.5中   系统->首选项->输入法中选择“使用iBus(推荐)”,点击首选输入法n遍,没有任何效果. 2.我也弄了很多种方式包括用 yum install " ...

  5. Spring框架——继承 - 依赖 - 命名空间

    Spring 继承 子 bean 可以继承⽗ bean 的属性值. <bean id="user" class="com.sunjian.entity.User&q ...

  6. 循序渐进地聊一聊 box-shaow

    影子在现实生活中可以是一个物体的副本,在 CSS 中也是这样的,相当于复制了那个元素(并不是真正的元素,对页面布局没有任何影响),可以从下面的代码中看出来. .container { width: 1 ...

  7. python-pathlib

    2019-12-12 04:27:17 我们知道在不同的操作系统中文件路径的组成方式是不同的,因此在python中关于路径的问题以往我们通常采用os.path.join来进行路径的字符串级别的串联,通 ...

  8. Magento2(麦进斗) docker 安装

    Magento 介绍 Magento(麦进斗)是一套专业开源的电子商务系统,采用php进行开发,使用Zend Framework框架.Magento设计得非常灵活,具有模块化架构体系和丰富的功能.易于 ...

  9. 为什么你的程序配了classpath还是找不到类

    classpath简介 classpath是java程序时拥有的一个系统变量,这个变量可以通过如下方式获取 System.out.println(System.getProperty("ja ...

  10. java两数相乘基础算法

    下面是别人给我的代码: package com.bootdo; public class Test { public static void main(String[] args) { System. ...