mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Server side pagination for the part list
This commit is contained in:
parent
8ce7b572cc
commit
487794a938
@ -9,6 +9,7 @@ from django_filters.rest_framework import DjangoFilterBackend
|
|||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.db.models import Q, F, Count, Prefetch, Sum
|
from django.db.models import Q, F, Count, Prefetch, Sum
|
||||||
|
|
||||||
|
from rest_framework.pagination import LimitOffsetPagination
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import filters, serializers
|
from rest_framework import filters, serializers
|
||||||
@ -371,6 +372,8 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
|
|
||||||
starred_parts = None
|
starred_parts = None
|
||||||
|
|
||||||
|
pagination_class = LimitOffsetPagination
|
||||||
|
|
||||||
def get_serializer(self, *args, **kwargs):
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
|
||||||
# Ensure the request context is passed through
|
# Ensure the request context is passed through
|
||||||
@ -397,10 +400,10 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
queryset = self.filter_queryset(self.get_queryset())
|
queryset = self.filter_queryset(self.get_queryset())
|
||||||
|
|
||||||
page = self.paginate_queryset(queryset)
|
page = self.paginate_queryset(queryset)
|
||||||
|
|
||||||
if page is not None:
|
if page is not None:
|
||||||
serializer = self.get_serializer(page, many=True)
|
serializer = self.get_serializer(page, many=True)
|
||||||
return self.get_paginated_response(serializer.data)
|
else:
|
||||||
|
|
||||||
serializer = self.get_serializer(queryset, many=True)
|
serializer = self.get_serializer(queryset, many=True)
|
||||||
|
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
@ -445,7 +448,9 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
a) For HTTP requests (e.g. via the browseable API) return a DRF response
|
a) For HTTP requests (e.g. via the browseable API) return a DRF response
|
||||||
b) For AJAX requests, simply return a JSON rendered response.
|
b) For AJAX requests, simply return a JSON rendered response.
|
||||||
"""
|
"""
|
||||||
if request.is_ajax():
|
if page is not None:
|
||||||
|
return self.get_paginated_response(data)
|
||||||
|
elif request.is_ajax():
|
||||||
return JsonResponse(data, safe=False)
|
return JsonResponse(data, safe=False)
|
||||||
else:
|
else:
|
||||||
return Response(data)
|
return Response(data)
|
||||||
@ -641,17 +646,6 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
|
|
||||||
queryset = queryset.filter(pk__in=parts_need_stock)
|
queryset = queryset.filter(pk__in=parts_need_stock)
|
||||||
|
|
||||||
# Limit number of results
|
|
||||||
limit = params.get('limit', None)
|
|
||||||
|
|
||||||
if limit is not None:
|
|
||||||
try:
|
|
||||||
limit = int(limit)
|
|
||||||
if limit > 0:
|
|
||||||
queryset = queryset[:limit]
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = [
|
||||||
@ -674,6 +668,8 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
ordering_fields = [
|
ordering_fields = [
|
||||||
'name',
|
'name',
|
||||||
'creation_date',
|
'creation_date',
|
||||||
|
'IPN',
|
||||||
|
'in_stock',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Default ordering
|
# Default ordering
|
||||||
@ -685,6 +681,7 @@ class PartList(generics.ListCreateAPIView):
|
|||||||
'IPN',
|
'IPN',
|
||||||
'revision',
|
'revision',
|
||||||
'keywords',
|
'keywords',
|
||||||
|
'category__name',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -387,7 +387,6 @@ class StockList(generics.ListCreateAPIView):
|
|||||||
page = self.paginate_queryset(queryset)
|
page = self.paginate_queryset(queryset)
|
||||||
|
|
||||||
if page is not None:
|
if page is not None:
|
||||||
|
|
||||||
serializer = self.get_serializer(page, many=True)
|
serializer = self.get_serializer(page, many=True)
|
||||||
else:
|
else:
|
||||||
serializer = self.get_serializer(queryset, many=True)
|
serializer = self.get_serializer(queryset, many=True)
|
||||||
@ -476,7 +475,7 @@ class StockList(generics.ListCreateAPIView):
|
|||||||
|
|
||||||
if page is not None:
|
if page is not None:
|
||||||
return self.get_paginated_response(data)
|
return self.get_paginated_response(data)
|
||||||
if request.is_ajax():
|
elif request.is_ajax():
|
||||||
return JsonResponse(data, safe=False)
|
return JsonResponse(data, safe=False)
|
||||||
else:
|
else:
|
||||||
return Response(data)
|
return Response(data)
|
||||||
|
@ -366,7 +366,6 @@ function loadPartTable(table, url, options={}) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
columns.push({
|
columns.push({
|
||||||
sortable: true,
|
|
||||||
field: 'description',
|
field: 'description',
|
||||||
title: '{% trans "Description" %}',
|
title: '{% trans "Description" %}',
|
||||||
formatter: function(value, row, index, field) {
|
formatter: function(value, row, index, field) {
|
||||||
@ -448,6 +447,8 @@ function loadPartTable(table, url, options={}) {
|
|||||||
groupBy: false,
|
groupBy: false,
|
||||||
name: options.name || 'part',
|
name: options.name || 'part',
|
||||||
original: params,
|
original: params,
|
||||||
|
sidePagination: 'server',
|
||||||
|
pagination: 'true',
|
||||||
formatNoMatches: function() { return '{% trans "No parts found" %}'; },
|
formatNoMatches: function() { return '{% trans "No parts found" %}'; },
|
||||||
columns: columns,
|
columns: columns,
|
||||||
showColumns: true,
|
showColumns: true,
|
||||||
|
Loading…
Reference in New Issue
Block a user