Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django rest框架中self.get_序列化程序和序列化程序对象之间的区别是什么?_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django rest框架中self.get_序列化程序和序列化程序对象之间的区别是什么?

Python Django rest框架中self.get_序列化程序和序列化程序对象之间的区别是什么?,python,django,django-rest-framework,Python,Django,Django Rest Framework,目前,我已经开始学习django rest框架,下面是获取序列化程序对象的代码 1)serializer = self.get_serializer(queryset, many=True) 2)serializer = MyDataTypeSerializer(queryset, many=True) 通过使用上述两种方法,我可以得到几乎相同的输出,所以我试图找出它们之间的差异,但没有找到任何差异 我在我的视图集中也使用了上述方法 class MyDataTypeViewSet(mixins

目前,我已经开始学习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\u serializer()
还负责传递视图集的序列化程序上下文,并调用
get\u serializer\u class()
确定要使用哪个序列化程序类

除非该函数是从自定义的,并且设置了serializer\u class=MyDataTypeSerializer

serializer = self.get_serializer(queryset, many=True)
完全等同于

serializer = MyDataTypeSerializer(
  queryset,
  many=True,
  context=self.get_serializer_context(),
)

您是否费心看了get_serializer()的代码。它只是获取类,然后传递您的参数。它有三行。但我想知道这两种方法的区别。我什么时候应该使用哪一个?您还没有显示要在哪里使用它们。一个是视图的基本方法,默认情况下由框架使用。如果需要,可以手动使用另一个。通常不需要在视图集中直接调用它们中的任何一个。第一个只是构造上下文对象并调用您的#2行。我已经编辑了我在项目中如何使用它的问题。所以我认为,在上述情况下,使用self.get#序列化程序比使用MyDataTypeSerializer实例更可取。是吗?是的,这就是我要用的。