2
0
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:
Oliver
2021-03-01 13:31:50 +11:00
committed by GitHub
17 changed files with 148 additions and 41 deletions

View File

@ -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',
]

View File

@ -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' %}",
});

View File

@ -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):
"""