关于React和DRF的整合(修改分页后返回的内容)

       对于前端的表格数据,需要返回数据本身的序号,不是这个记录的ID。如果直接使用DRF的序列化功能则不能产生这个序号,因此要对DRF内置的ListModelMixin类进行修改。

class ListModelMixin(object):
    “””
    List a queryset.
    “””
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        page = self.paginate_queryset(queryset)                      #paginate_queryset定义在pagination.py文件中
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)     #分页后的调用,可以在修改data实现列的扩展
        serializer = self.get_serializer(queryset, many=True)       #未分页的返回结果,可以在修改data实现列的扩展
        return Response(serializer.data)
       该类中的paginate_queryset()调用的是pagination.py调用的分页类,默认的分页类为PageNumberPagination。如果需要分页,即page不为None,则调用get_paginated_response进行序列化。其结果是调用默认的PageNumberPagination中的get_paginated_response方法,并返回如下JSON字符内容。
    def get_paginated_response(self, data):    #修改后能改变返回分页数据的格式
        return Response(OrderedDict([
            (‘count’, self.page.paginator.count),
            (‘next’, self.get_next_link()),
            (‘previous’, self.get_previous_link()),
            (‘results’, data)
        ]))
如果要修改返回既可以在这个地方添加或者修改。
         最好的方式是创建新的分页类,重写get_paginated_response方法。
         总结,如果DRF设置了分页。则如果URL请求要求分页,就会调用分页类中的方法生成分页返回信息。否则就需要在ListModelMixin的seriaizer.data中修改返回的信息。

发表评论

电子邮件地址不会被公开。 必填项已用*标注