mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-20 22:06:28 +00:00
Merge pull request #1373 from SchrodingersGat/server-pagination
Server pagination
This commit is contained in:
@ -397,11 +397,11 @@ class PartList(generics.ListCreateAPIView):
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
||||
page = self.paginate_queryset(queryset)
|
||||
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
else:
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
|
||||
data = serializer.data
|
||||
|
||||
@ -445,7 +445,9 @@ class PartList(generics.ListCreateAPIView):
|
||||
a) For HTTP requests (e.g. via the browseable API) return a DRF 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)
|
||||
else:
|
||||
return Response(data)
|
||||
@ -641,15 +643,18 @@ class PartList(generics.ListCreateAPIView):
|
||||
|
||||
queryset = queryset.filter(pk__in=parts_need_stock)
|
||||
|
||||
# Limit number of results
|
||||
limit = params.get('limit', None)
|
||||
# Optionally limit the maximum number of returned results
|
||||
# e.g. for displaying "recent part" list
|
||||
max_results = params.get('max_results', None)
|
||||
|
||||
if limit is not None:
|
||||
if max_results is not None:
|
||||
try:
|
||||
limit = int(limit)
|
||||
if limit > 0:
|
||||
queryset = queryset[:limit]
|
||||
except ValueError:
|
||||
max_results = int(max_results)
|
||||
|
||||
if max_results > 0:
|
||||
queryset = queryset[:max_results]
|
||||
|
||||
except (ValueError):
|
||||
pass
|
||||
|
||||
return queryset
|
||||
@ -674,6 +679,8 @@ class PartList(generics.ListCreateAPIView):
|
||||
ordering_fields = [
|
||||
'name',
|
||||
'creation_date',
|
||||
'IPN',
|
||||
'in_stock',
|
||||
]
|
||||
|
||||
# Default ordering
|
||||
@ -685,6 +692,7 @@ class PartList(generics.ListCreateAPIView):
|
||||
'IPN',
|
||||
'revision',
|
||||
'keywords',
|
||||
'category__name',
|
||||
]
|
||||
|
||||
|
||||
|
@ -235,6 +235,21 @@ class PartAPITest(InvenTreeAPITestCase):
|
||||
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
|
||||
def test_paginate(self):
|
||||
"""
|
||||
Test pagination of the Part list API
|
||||
"""
|
||||
|
||||
for n in [1, 5, 10]:
|
||||
response = self.get(reverse('api-part-list'), {'limit': n})
|
||||
|
||||
data = response.data
|
||||
|
||||
self.assertIn('count', data)
|
||||
self.assertIn('results', data)
|
||||
|
||||
self.assertEqual(len(data['results']), n)
|
||||
|
||||
|
||||
class PartAPIAggregationTest(InvenTreeAPITestCase):
|
||||
"""
|
||||
|
Reference in New Issue
Block a user