rest_framework-序列化-1
序列化
- 定义模型类
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的更多相关文章
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- rest_framework序列化组件
一.Django自带的序列化组件 ==>对象序列化成json格式的字符串 from django.core import serializers from django.core import ...
- rest_framework序列化,反序列化
序列化组件 from rest_framework.response import Response1.Response本质也是继承了httpresponse,比httpResponse还强大,传入一 ...
- rest_framework 序列化篇
感谢alex和武沛齐老师 rest_framework中的序列化表示 from rest_framework import serializersclass RoleSerializer(serial ...
- rest_framework序列化
1.序列化 1)拿到queryset 2)将queryset 给序列化类 serializer = IdcSerializer(idc) #单个对象 serializer = IdcSerial ...
- 【Django】rest_framework 序列化自定义替换返回值
# 序列化设置 class PagerSerialiser(serializers.ModelSerializer): name = serializers.CharField(source=&quo ...
- django rest_framework Serializers 序列化组件
为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿 ...
- rest_framework之序列化组件
什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有form组件帮我们去做数据校验 我们有模板语法,从数据库取出的queryset对象不需要人为去转格式 当我们写前后端分离项 ...
- drf序列化组件
rest_framework序列化之Serializer 步骤: 1.自定义一个类,继承Serializer类: 2.在类中写要序列化的字段: 3.使用:在views.py文件中,book_ser=B ...
- Serializers 序列化组件
Serializers 序列化组件 为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转 ...
随机推荐
- C++ 小练习,一个整型数字的处理
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //输入一个任意位数的int整数,并判断该整数的位数,并输出每一位数(每个数字中间用空 ...
- Iconfont-阿里巴巴矢量图标库 登录账户是 github自动登录
Iconfont-阿里巴巴矢量图标库 登录账户是 github自动登录
- 快速排序--15--快排--LeetCode排序数组
排序数组 给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] ...
- 我用STM32MP1做了个疫情监控平台2—Qt环境搭建
目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.主机搭建Qt环境 4.第一个Qt程序--Hello World 5.一些问题 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应用程序开发框架.使 ...
- 网络安全从入门到精通(第一章-2)快速自建web安全测试环境
本文内容 动态语言 常见服务器脚本 动态语言可以做什么? 常见服务器环境快捷搭建软件 快速的搭网站的环境 CMS 1,动态语言:是对服务器行为的编程,这被称为服务器端脚本或服务器脚本. 2,常见服务器 ...
- Linux命令进阶篇-文件查看与查找
上一篇的博客对于Linux如何在不同目录下跳转和查看目录下内容做出了总结,主要靠cd和ls,很常见也很实用.但是你看到目录下面那么多不同花花绿绿的文件,心里是不是痒痒,是不是想进去一探究竟,有办法! ...
- Python基础 | 关于“循环”那些事
目录 for 循环 list range enumerate zip while 循环 while相当于if时 while充当for和if的混合体 泛循环 列表解析 map 迭代器 生成器 循环的跳出 ...
- rbac权限+中间件 初识
rbac权限+中间件 1.权限组件rbac 1.什么是权限 1 项目与应用 2 什么是权限? 一个包含正则表达式url就是一个权限 who what how ---------->True or ...
- rest_framework序列化,反序列化
序列化组件 from rest_framework.response import Response1.Response本质也是继承了httpresponse,比httpResponse还强大,传入一 ...
- RMQ Tarjan的Sparse-Table算法
参考博客:https://www.cnblogs.com/wenzhixin/p/9714760.html 预处理时间复杂度是O(nlogn),代码如下: void init(const vector ...