Tabulator и Django Rest Framwork - ошибка при удаленной пагинации
У меня возникли некоторые проблемы с выяснением того, как использовать Tabulator 4.9
и DRF 3.1.2
для работы друг с другом с помощью пагинации. Все работает нормально, пока я не использую настройку page size
в Tabulator
, которая
Я использовал простой DRF GenericViewSet
с ListModelMixin
и RetrieveModelMixin
:
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-1
страниц я вижу только n
элементы с некоторым белым пространством внизу. Только n
я страница имеет 25
элементов.