python - Django rest 框架中的 self.get_serializer 和 Serializer 对象有什么区别?
问题描述
目前我已经开始学习 django rest 框架,并且遇到了下面的获取序列化器对象的代码。
1)serializer = self.get_serializer(queryset, many=True)
2)serializer = MyDataTypeSerializer(queryset, many=True)
通过使用上述两种方法,我可以获得几乎相同类型的输出,因此我试图找到它们之间的差异,但找不到任何差异。
我在我的视图集中也使用了上述方法。
class MyDataTypeViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
serializer_class = MyDataTypeSerializer
permission_classes = [IsAuthenticated]
queryset = MyDataType.objects.all()
def get_queryset(self):
return self.queryset.filter(user_id=self.request.user.id).order_by('-created_at')
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
serializer = self.get_paginated_response(serializer.data)
return return_success(serializer.data)
serializer = self.get_serializer(queryset, many=True)
#serializer = MyDataTypeSerializer(queryset, many=True)
return return_success(serializer.data)
如果有人知道,请告诉我这两种方法之间的区别以及如何决定在哪种情况下使用哪种方法。
谢谢,
解决方案
get_serializer()
还负责传入视图集的序列化程序上下文,并调用get_serializer_class()
以确定要使用的序列化程序类。
除非该功能已从Andrew 在评论中链接的默认视图集自定义,并且serializer_class = MyDataTypeSerializer
已设置,
serializer = self.get_serializer(queryset, many=True)
完全等同于
serializer = MyDataTypeSerializer(
queryset,
many=True,
context=self.get_serializer_context(),
)
推荐阅读
- python - 二维列表理解,Python 3
- python - 如何找出我正在使用的 CPython 版本?
- java - 使用翻译api后出现错误
- sql - SQL Server:用前一个单元格中的值填充空行
- android - SQLite,dabase.insert() 返回 -1
- redirect - 如何让重定向链在 Netlify 中工作?
- android - Android Studio:错误:程序类型已存在:android.support.v4.app.BackStackRecord$Op
- javascript - 如何防止精灵在 Matter.js 中被鼠标移动?
- c# - 为什么这个简单的 WPF 命令不起作用?
- c++ - 为什么当我使用变量存储数值结果而不是重新计算时,C++ 程序运行速度较慢?