DjangoDRF序列化组件使用
创建一个Django项目,名字:untitled1
创建三张表
from django.db import models
class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField()
def __str__(self):
return self.name
class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField()
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2)
publish = models.ForeignKey(to="Publish", to_field="nid", related_name='books', on_delete=models.CASCADE)
authors = models.ManyToManyField(to="Author")
def __str__(self):
return self.title
#####################################################################################
# 一对多反向查询
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('index', views.PublishView.as_view()),
]
# views.py
class PublishView(APIView):
def get(self, request):
publishes = Publish.objects.all()
serializer_data = PublishSerializer1(publishes, many=True)
return Response(serializer_data.data)
# publish_serializer.py
class PublishSerializer1(serializers.ModelSerializer):
book_list = serializers.SerializerMethodField()
def get_book_list(self, obj):
# obj是序列化模型的对象
# 这是Book类,所以这里obj就是图书对象
print('----->', obj)
books = []
for book in obj.books.all():
books.append(book.title)
return books
class Meta:
model = Publish
fields = ('nid', 'name', 'city', 'email', 'book_list')
#####################################################################################
# 一对多正向查询/多对多正向查询
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('index2', views.PublishView.as_view()),
]
# views.py
class BookView(APIView):
def get(self, request):
books = Book.objects.all()
serializer_data = BookSerializer1(books, many=True)
return Response(serializer_data.data)
# book_serializer.py
from rest_framework import serializers
from bms.models import Book, Publish
class PublishSerializer(serializers.ModelSerializer):
class Meta:
model = Publish
fields = ('nid', 'name', 'city', 'email')
class BookSerializer1(serializers.ModelSerializer):
# 一对多正向查询
publish = PublishSerializer()
# 多对多正向查询
author_list = serializers.SerializerMethodField()
# 请注意,get_必须与字段名称一致,否则会报错。
def get_author_list(self, obj):
# obj是序列化模型类的对象
# 这里是Book类,所以obj就是图书对象
print('----->', obj)
authors = []
for author in obj.authors.all():
authors.append(author.name)
return authors
class Meta:
model = Book
fields = ('title', 'publishDate', 'price', 'publish', 'author_list')
#####################################################################################
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('index0', views.PublishView.as_view()),
]
# views.py
class BookView2(APIView):
def get(self, request):
books = Book.objects.all()
serializer_data = BookSerializer2(books, many=True)
return Response(serializer_data.data)
# book_serializer.py
class BookSerializer2(serializers.Serializer):
title = serializers.CharField(max_length=128)
publishDate = serializers.DateField()
price = serializers.DecimalField(max_digits=5, decimal_places=2)
# 处理一对多字段
publish = serializers.CharField()
publish_title = serializers.CharField(max_length=32, read_only=True, source='publish.name')
publish_email = serializers.CharField(max_length=32, read_only=True, source='publish.email')
# 处理多对多字段
author_list = serializers.SerializerMethodField()
def get_author_list(self, obj):
# obj是序列化模型的对象
# 这是Book类,所以这里obj就是图书对象
print('----->', obj)
authors = []
for author in obj.authors.all():
authors.append(author.name)
return authors
#####################################################################################
# urls.py
from django.urls import path
from bms import views
urlpatterns = [
# 一对多反向查询
path('authors', views.AuthorView1.as_view()),
]
# views.py
class AuthorView1(APIView):
def get(self, request):
authors = Author.objects.all()
serializer_data = AuthorSerializer(authors, many=True)
return Response(serializer_data.data)
# author_serializer.py
from rest_framework import serializers
from bms.models import Author
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = '__all__'
DjangoDRF序列化组件使用的更多相关文章
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...
- cvb源码分析,resful规范,drf,drf序列化组件,95
1 CBV的源码分析 -Class Base View(基于类的视图) -Function Base View(基于函数的视图) -def as_view 类方法 -def view:类方法内部,闭包 ...
- rest-framework之APIView 序列化组件
rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...
- drf 之序列化组件
序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象. 用orm查回来的数据都是都是一个一个的对象, 但是前端要的是json格式字符串. 序列化两大功能 ...
- DRF 序列化组件
Serializers 序列化组件 Django的序列化方法 class BooksView(View): def get(self, request): book_list = Book.objec ...
- python全栈开发day99-DRF序列化组件
1.解释器组件源码分析 https://www.processon.com/view/link/5ba0a8e7e4b0534c9be0c968 2.基于CBV的接口设计 1).django循环que ...
- Serializers 序列化组件
Serializers 序列化组件 为什么要用序列化组件 当我们做前后端分离的项目~~我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转 ...
- django rest_framework 序列化组件详解
为什么要用序列化组件 当我们做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 那么我们给前端数据的时候都要转成json格式,那就需要对我们从数据库拿到 ...
- DRF框架之 serializers 序列化组件
1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers ...
随机推荐
- QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
http://blog.csdn.net/zhuyingqingfen/article/details/6562246 如题,出现这个的原因是,如果你的窗口继承的是QMainwindow,需要设置 s ...
- Python学习之read()方法
read([size [,chars [,firstline]]]) 含义: 从文本流(io.TextIOWrapper)中解码数据并返回字符串对象.
- 获取表单select域的选择部分的文本
body> <form action="index.php"> <select name="" id="select" ...
- struts-config message-resources配置问题总结
问题:我的app无法读取配置好的ApplicationResources.properties中的内容 解答:文件目录为 /webapp /WEB-INF /classes ApplicationRe ...
- linux学习笔记18--文件/chmod/chown/chgrp
文件类型与扩展名: Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开 ...
- Python 中 global、nonlocal的使用
1.在学习python过程中很重要的一点需要记住:如果在函数内部定义了跟全局变量同名的变量,那么该变量将是局部变量,而全局变量的引用在该函数范围内将失效. x = 9 def a(): x = 10 ...
- yii2 RESTful API Develop
参考文档:http://www.yiiframework.com/doc-2.0/guide-rest.html 以 DB 中的 news 表为例创建该资源的 RESTful API,最终的测试通过工 ...
- Oracle安装完成后,如何用命令行启动和关闭数据库?
Oracle安装完成后,如何用命令行启动和关闭数据库? 解答: 打开:STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ dat ...
- 数码相机常用CCD/CMOS尺寸对比
数码相机的关键元件CCD或CMOS又称为“影像传感器”,其作用相当于感光胶片.CCD尺寸越大,采集光线的效果越好,画面记录的信息就越多,保留的细节也就越丰富,所以图像更完美漂亮. CCD尺寸的大小与像 ...
- Microsoft Visual C++ 2005 Redistributable---win下安装软件“嘭”的一声报错!
今天下了个MindManager,正准备安装结果出现了如题的错误提示!!! 于是百度/google一下,在权威的微软官网下找到了答案,他妈的,看了之后表示很无奈 If the non unicode ...