mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-01 11:10:54 +00:00
Merge pull request #1373 from SchrodingersGat/server-pagination
Server pagination
This commit is contained in:
@ -381,7 +381,12 @@ class StockList(generics.ListCreateAPIView):
|
||||
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
page = self.paginate_queryset(queryset)
|
||||
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
else:
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
|
||||
data = serializer.data
|
||||
|
||||
@ -465,7 +470,9 @@ class StockList(generics.ListCreateAPIView):
|
||||
Note: b) is about 100x quicker than a), because the DRF framework adds a lot of cruft
|
||||
"""
|
||||
|
||||
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)
|
||||
@ -806,16 +813,15 @@ class StockList(generics.ListCreateAPIView):
|
||||
print("After error:", str(updated_after))
|
||||
pass
|
||||
|
||||
# Limit number of results
|
||||
limit = params.get('limit', None)
|
||||
# Optionally, limit the maximum number of returned results
|
||||
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]
|
||||
max_results = int(max_results)
|
||||
|
||||
if max_results > 0:
|
||||
queryset = queryset[:max_results]
|
||||
except (ValueError):
|
||||
pass
|
||||
|
||||
@ -839,9 +845,12 @@ class StockList(generics.ListCreateAPIView):
|
||||
|
||||
ordering_fields = [
|
||||
'part__name',
|
||||
'part__IPN',
|
||||
'updated',
|
||||
'stocktake_date',
|
||||
'expiry_date',
|
||||
'quantity',
|
||||
'status',
|
||||
]
|
||||
|
||||
ordering = ['part__name']
|
||||
@ -851,7 +860,8 @@ class StockList(generics.ListCreateAPIView):
|
||||
'batch',
|
||||
'part__name',
|
||||
'part__IPN',
|
||||
'part__description'
|
||||
'part__description',
|
||||
'location__name',
|
||||
]
|
||||
|
||||
|
||||
|
@ -52,12 +52,10 @@
|
||||
|
||||
|
||||
loadStockTrackingTable($("#track-table"), {
|
||||
params: function(p) {
|
||||
return {
|
||||
ordering: '-date',
|
||||
item: {{ item.pk }},
|
||||
user_detail: true,
|
||||
};
|
||||
params: {
|
||||
ordering: '-date',
|
||||
item: {{ item.pk }},
|
||||
user_detail: true,
|
||||
},
|
||||
url: "{% url 'api-stock-track' %}",
|
||||
});
|
||||
|
@ -244,6 +244,19 @@ class StockItemListTest(StockAPITestCase):
|
||||
response = self.get_stock(expired=0)
|
||||
self.assertEqual(len(response), 16)
|
||||
|
||||
def test_paginate(self):
|
||||
"""
|
||||
Test that we can paginate results correctly
|
||||
"""
|
||||
|
||||
for n in [1, 5, 10]:
|
||||
response = self.get_stock(limit=n)
|
||||
|
||||
self.assertIn('count', response)
|
||||
self.assertIn('results', response)
|
||||
|
||||
self.assertEqual(len(response['results']), n)
|
||||
|
||||
|
||||
class StockItemTest(StockAPITestCase):
|
||||
"""
|
||||
|
Reference in New Issue
Block a user