gpt4 book ai didi

python - Django rest 框架中的 self.get_serializer 和 Serializer 对象有什么区别?

转载 作者:行者123 更新时间:2023-12-03 19:11:47 25 4
gpt4 key购买 nike

目前我已经开始学习 django rest 框架,我遇到了以下用于获取序列化程序对象的代码。

1)serializer = self.get_serializer(queryset, many=True)
2)serializer = MyDataTypeSerializer(queryset, many=True)

通过使用上述两种方法,我可以获得几乎相同类型的输出,因此我试图找到它们之间的差异,但找不到任何差异。

我在我的 View 集中也使用了上述方法。
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()还负责传递 View 集的序列化器上下文,并调用 get_serializer_class()找出要使用的序列化程序类。

除非该功能是从 the viewset default as linked by Andrew in the comments 定制的, 和 serializer_class = MyDataTypeSerializer已经设置好了,

serializer = self.get_serializer(queryset, many=True)

完全等同于
serializer = MyDataTypeSerializer(
queryset,
many=True,
context=self.get_serializer_context(),
)

关于python - Django rest 框架中的 self.get_serializer 和 Serializer 对象有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61796996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com