drf : 序列化类使用many参数的作用,源码解析
序列化类使用many参数的作用
views.py
from rest_framework.views import APIView
from .serizlizer import BookSerializers
from rest_framework.response import Response
from .models import Books
class BookView(APIView):
def post(self, request):
print(request)
ser = BookSerializers(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data)
def get(self, request):
book_list = Books.objects.all()
# many=True 代表序列化多条数据
ser = BookSerializers(instance=book_list, many=True)
"""
<class 'rest_framework.serializers.ListSerializer'>
ser 是ListSerializer的对象
"""
print(type(ser))
# 这一步才是真正将book_list转为字典并返回。调ser.data才是真正的序列化过程
return Response(ser.data)
# 查询单条
class BookDetailView(APIView):
def get(self, request, pk):
book = Books.objects.filter(pk=pk).first()
# 不传many默认为,many=False
ser = BookSerializers(instance=book)
"""
<class 'app01.serizlizer.BookSerializers'>
ser是BookSerializers的对象
"""
print(type(ser))
# 这一步才是真正将book_list转为字典并返回。调ser.data才是真正的序列化过程
return Response(ser.data)
这里涉及到元类的知识。
类也是一个对象,一切皆对象。类这个对象也是一个类实例化得到的,这个类就叫做元类。
对象是实例化的得到的,类也是一个对象,BookSerializers这个类也是一个对象,既然是对象,那么也会有类,类的类就叫元类。
所以,类也是由一个了类产生的,产生这个类的类就叫元类。
对象的产生过程有__new__
所控制
注意:对象的实例化过程,__new__
在__init__
之前执行,__new__
是产生空对象,__init__
给对象赋值。
那么ListSerializer 和 BookSerializer 有什么联系。?
ListSerializer就是一个列表,列表套了一个个的Serializer。[ser1,ser2,ser3...]
。
# 查询单条
class BookDetailView(APIView):
def get(self, request, pk):
book = Books.objects.filter(pk=pk).first()
# 不传many默认为,many=False
ser = BookSerializers(instance=book)
"""
<class 'app01.serizlizer.BookSerializers'>
ser是BookSerializers的对象
"""
print(type(ser))
"""
BookSerializers(instance=<Books: Books object (1)>):
id = IntegerField(label='ID', read_only=True)
name = CharField(max_length=32)
price = IntegerField()
publish = PrimaryKeyRelatedField(allow_null=True, queryset=Publish.objects.all(), required=False)
"""
print(ser)
# 这一步才是真正将book_list转为字典并返回。调ser.data才是真正的序列化过程
return Response(ser.data)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)