创建一个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. ZThread在Windows下打印若干DEBUG信息到console的原因

    代码见这篇随笔 在Windows下的运行结果:ZThread打印了一堆东西(并不是我写的) 文件结构: 最开始我以为是编译选项没弄对,同样的代码放到Linux下编译,还是打印这些信息 注意我在Linu ...

  2. YARN机制

    YARN是资源管理调度的机制,之前一直以来和MapReduce机制合在一起,之后才分开.正是因为YARN机制单独独立出来,才使得Hadoop框架更加具有普适性.MapReduce可以处理海量离线数据, ...

  3. datagrid多复选框

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Ch ...

  4. NPOI 1.2教程(目录)操作Excel

    原文地址:http://www.cnblogs.com/atao/archive/2009/11/15/1603528.html

  5. Linux动态库搜索路径的技巧

    众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径 ...

  6. MathType编辑钢筋符号就是这么简单

    很多的用户在使用MathType公式编辑器的时候,发现它所包含的符号非常的多,几乎你在数学中看到的任何符号都能用MathType编辑出来.它能够满足各个学科对符号的需求,除了常规的数学物理符号之外,也 ...

  7. java -Mac搭建本地服务器并映射到外网

    最近在学习Html,小有进步变想着写一个浪漫的静态页面给女朋友浪漫一下,那么问题就来了,如何把我的网页让对网络一窍不通的女朋友看到,所以便想到了是用自己电脑作为服务器的想法.百度以后整理如下: 首先搭 ...

  8. Duilib教程-自动布局3-分隔条

    先看一个常用的图,如下: 左边是导航栏,右边是信息区. 中间可以自由拉伸. XML如下: <?xml version="1.0" encoding="utf-8&q ...

  9. 最近5年133个Java面试问题列表

    Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入. 在我 ...

  10. python 之 赋值和拷贝(你真的了解吗)

    现象:先上一段代码. >>> import copy >>> a = [1,2,3,4,['a','b']] >>> b = a >> ...