由于根据一定的条件使用不同的序列化程序,我更喜欢使用APIView和override get函数。我对APIView很满意,但现在我需要分页功能,所以我很难做到这一点。这就是为什么我想切换到GenericAPIView,但是由于使用了多个序列化程序,我不知道如何才能做到这一点。在
class ItemsAPIView(APIView):
permission_classes = (permissions.IsAuthenticated,)
pagination_class = api_settings.DEFAULT_PAGINATION_CLASS
def get(self, request, format=None):
"""
Return a list of all devices of this user.
"""
reply = {}
try:
products = BaseItem.objects.owned_items().filter(owner=request.user)
reply['data'] = OwnedItemSerializer(products, many=True).data
items = BaseItem.objects.dev_items().filter(owner=request.user)
reply['data'].extend(ItemSerializer(items, many=True).data)
except:
reply['data'] = []
return Response(reply, status.HTTP_200_OK)
更新
我试过的另一种方法是
^{pr2}$没有任何办法奏效。我哪里做错了?在
这就像导入paginator并在apieview中手动调用它一样简单。在
注意:自定义类不是必需的,您只需从rest导入即可_框架.分页在你剧本的顶端。我创建了一个CustomPagination类,继承自PageNumberPagination,这样就可以按照docs-http://www.django-rest-framework.org/api-guide/pagination/设置页面大小查询
你真的需要两个序列化程序吗?
我认为将单个序列化程序与自定义
to_representation
一起使用可能是一个更好的选择:然后,您可以使用一个通用视图。您的代码更干净、更简单,而且不必担心分页:
^{pr2}$相关问题 更多 >
编程相关推荐