【发布时间】:2020-05-14 12:08:21
【问题描述】:
目前我已经开始学习 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() 的代码? github.com/encode/django-rest-framework/blob/master/… 。它只是获取课程,然后通过您的论点。它的 3 行。
-
但是我想知道这两种方法的区别。我应该什么时候使用哪一个?
-
你没有显示你想在哪里使用它们。一种是视图的基本方法,框架默认使用。另一个可以在需要时手动使用。您通常不需要在视图集中直接调用任何一个。第一个只是构造上下文对象并调用您的#2 行。
-
我已经编辑了我在项目中如何使用它的问题。
标签: python django django-rest-framework