From 2e1508b4f676fb6f71c0ca76dc59616215d3ae22 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 31 Jan 2018 13:20:05 +0100 Subject: Tables: fix length filtering --- ishtar_common/views.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'ishtar_common/views.py') diff --git a/ishtar_common/views.py b/ishtar_common/views.py index e8a7efb40..8db0e9460 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -632,7 +632,7 @@ def _get_values(request, val): DEFAULT_ROW_NUMBER = 10 -# length is used by ajax DataTable call and can be ambiguous for some models +# length is used by ajax DataTables requests EXCLUDED_FIELDS = ['length'] @@ -728,9 +728,24 @@ def get_item(model, func_name, default_name, extra_request_keys=[], request_keys.update(my_extra_request_keys) request_items = request.method == 'POST' and request.POST \ or request.GET - request_items = dict( - [(k, request_items[k]) - for k in request_items if k not in EXCLUDED_FIELDS]) + + # pager + try: + row_nb = int(request_items.get('length')) + except (ValueError, TypeError): + row_nb = DEFAULT_ROW_NUMBER + dct_request_items = {} + + # filter requested fields + for k in request_items: + if k in EXCLUDED_FIELDS: + continue + key = k[:] + if key.startswith('searchprefix_'): + key = key[len('searchprefix_'):] + dct_request_items[key] = request_items[k] + request_items = dct_request_items + dct = my_base_request if full == 'shortcut': dct['cached_label__icontains'] = request.GET.get('term', None) @@ -1046,11 +1061,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], # pager management start, end = 0, None page_nb = 1 - try: - row_nb = int(request_items.get('length')) - except (ValueError, TypeError): - row_nb = DEFAULT_ROW_NUMBER - if row_nb: + if row_nb and data_type == "json": try: start = int(request_items.get('start')) page_nb = start / row_nb + 1 -- cgit v1.2.3