创建一个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序列化组件使用的更多相关文章

  1. DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer

      DjangoRestFramework学习二之序列化组件.视图组件   本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...

  2. cvb源码分析,resful规范,drf,drf序列化组件,95

    1 CBV的源码分析 -Class Base View(基于类的视图) -Function Base View(基于函数的视图) -def as_view 类方法 -def view:类方法内部,闭包 ...

  3. rest-framework之APIView 序列化组件

    rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...

  4. drf 之序列化组件

    序列化 把Python中对象转换为json格式字符串 反序列化 把json格式转为为Python对象. 用orm查回来的数据都是都是一个一个的对象, 但是前端要的是json格式字符串. 序列化两大功能 ...

  5. DRF 序列化组件

    Serializers 序列化组件 Django的序列化方法 class BooksView(View): def get(self, request): book_list = Book.objec ...

  6. python全栈开发day99-DRF序列化组件

    1.解释器组件源码分析 https://www.processon.com/view/link/5ba0a8e7e4b0534c9be0c968 2.基于CBV的接口设计 1).django循环que ...

  7. Serializers 序列化组件

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

  8. django rest_framework 序列化组件详解

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

  9. DRF框架之 serializers 序列化组件

    1. 什么是序列化,其实在python中我们就学了序列化工具json工具,就是吧信息存为类字典形式 2. DRF框架自带序列化的工具: serializers 3. DRF框架 serializers ...

随机推荐

  1. QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout

    http://blog.csdn.net/zhuyingqingfen/article/details/6562246 如题,出现这个的原因是,如果你的窗口继承的是QMainwindow,需要设置 s ...

  2. Python学习之read()方法

    read([size [,chars [,firstline]]]) 含义: 从文本流(io.TextIOWrapper)中解码数据并返回字符串对象.

  3. 获取表单select域的选择部分的文本

    body> <form action="index.php"> <select name="" id="select" ...

  4. struts-config message-resources配置问题总结

    问题:我的app无法读取配置好的ApplicationResources.properties中的内容 解答:文件目录为 /webapp /WEB-INF /classes ApplicationRe ...

  5. linux学习笔记18--文件/chmod/chown/chgrp

    文件类型与扩展名: Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开 ...

  6. Python 中 global、nonlocal的使用

    1.在学习python过程中很重要的一点需要记住:如果在函数内部定义了跟全局变量同名的变量,那么该变量将是局部变量,而全局变量的引用在该函数范围内将失效. x = 9 def a(): x = 10 ...

  7. yii2 RESTful API Develop

    参考文档:http://www.yiiframework.com/doc-2.0/guide-rest.html 以 DB 中的 news 表为例创建该资源的 RESTful API,最终的测试通过工 ...

  8. Oracle安装完成后,如何用命令行启动和关闭数据库?

    Oracle安装完成后,如何用命令行启动和关闭数据库? 解答: 打开:STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ dat ...

  9. 数码相机常用CCD/CMOS尺寸对比

    数码相机的关键元件CCD或CMOS又称为“影像传感器”,其作用相当于感光胶片.CCD尺寸越大,采集光线的效果越好,画面记录的信息就越多,保留的细节也就越丰富,所以图像更完美漂亮. CCD尺寸的大小与像 ...

  10. Microsoft Visual C++ 2005 Redistributable---win下安装软件“嘭”的一声报错!

    今天下了个MindManager,正准备安装结果出现了如题的错误提示!!! 于是百度/google一下,在权威的微软官网下找到了答案,他妈的,看了之后表示很无奈 If the non unicode ...