首页 > 解决方案 > 制表符和 Django Rest 框架 - 远程分页错误

问题描述

我在弄清楚如何使用分页Tabulator 4.9以及如何DRF 3.1.2使用分页相互协作时遇到了一些问题。page size一切正常,直到我使用Tabulatorwhich

我使用了一个简单的DRFGenericViewSet和:ListModelMixinRetrieveModelMixin

class ProductViewSet(RetrieveModelMixin, ListModelMixin, GenericViewSet):
    serializer_class = ProductSerializer
    lookup_field = "number"

    def get_queryset(self):
        try:
            return Product.objects.all()
        except:
            return None

    def retrieve(self, request, serial = None):
        try:
            query = Product.objects.filter(serial = serial)
            results = ProductSerializer(data = query, many = True)
            results.is_valid()
            return Response(data = results.data, status = status.HTTP_200_OK)
        except Exception as E:
            return Response(data = f"""{E}""", status = status.HTTP_400_BAD_REQUEST)

我还在主项目文件夹中定义了一个 paginaton.py:

from rest_framework import pagination

class PageNumberPaginationWithCount(pagination.PageNumberPagination):
    def get_paginated_response(self, data):
        response = super(PageNumberPaginationWithCount, self).get_paginated_response(data)
        response.data['last_page'] = self.page.paginator.num_pages
        return response

并将其添加到 settings.py 中:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
    ],
    'DEFAULT_PAGINATION_CLASS': 'sstester3.pagination.PageNumberPaginationWithCount',
    'PAGE_SIZE': 25
}

在表格的 js 中,我使用了远程设置的分页:

let cols = [{title: "number", field: "number"},
            {title: "name", field: "name"}]

var table = new Tabulator("#producttable", {
    layout: "fitColumns",
    pagination: "remote",
    paginationSize: 25,
    paginationSizeSelector: [50, 100],
    ajaxURL: "api/products",
    paginationDataReceived: {"data": "results"},
    columns: cols
});

加载并从页面跳转到页面时,一切都很好。我认为这是因为PAGE_SIZE并且paginationSize都设置为25. 如果我使用网站上的设置,我会在所有页面上50看到20下面只有一些空白的项目n-1n只有n第页有25项目。

标签: djangodjango-rest-frameworktabulatordjango-pagination

解决方案


推荐阅读