summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py65
1 files changed, 54 insertions, 11 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index d8c5b1997..bae1c8464 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -607,6 +607,9 @@ def _get_values(request, val):
return new_vals
+DEFAULT_ROW_NUMBER = 10
+
+
def get_item(model, func_name, default_name, extra_request_keys=[],
base_request=None, bool_fields=[], reversed_bool_fields=[],
dated_fields=[], associated_models=[], relative_session_names=[],
@@ -965,13 +968,50 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
# manage sort tables
manual_sort_key = None
- order = request_items.get('sord')
- sign = order and order == u'desc' and "-" or ''
- q = request_items.get('sidx')
- if q == '__default__' and model._meta.ordering:
- orders = [sign + k for k in model._meta.ordering]
+ sorts = {}
+ for k in request_items:
+ if not k.startswith('order['):
+ continue
+ num = int(k.split(']')[0][len("order["):])
+ if num not in sorts:
+ sorts[num] = ['', ''] # sign, col_num
+ if k.endswith('[dir]'):
+ order = request_items[k]
+ sign = order and order == u'desc' and "-" or ''
+ sorts[num][0] = sign
+ if k.endswith('[column]'):
+ sorts[num][1] = request_items[k]
+ sign = ""
+ if not sorts and model._meta.ordering:
+ orders = [k for k in model._meta.ordering]
items = items.order_by(*orders)
+ else:
+ orders = []
+ for idx in sorted(sorts.keys()):
+ signe, col_num = sorts[idx]
+ k = query_table_cols[int(col_num) - 2] # remove id and link col
+ if k in request_keys:
+ k = request_keys[k]
+ if k.endswith("__pk"):
+ k = k[:-len("__pk")] + "__label"
+ if '__' in k:
+ k = k.split('__')[0]
+ orders.append(signe + k)
+ else:
+ # not a standard request key
+ if idx: # not the first - we ignore this sort
+ continue
+ sign = signe
+ manual_sort_key = k
+ logger.warning(
+ "**WARN get_item - {}**: manual sort key '{}'".format(
+ func_name, k))
+ break
+ if not manual_sort_key:
+ items = items.order_by(*orders)
+
+ """
elif q and q in request_keys:
ks = request_keys[q]
if type(ks) not in (list, tuple):
@@ -996,24 +1036,27 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if not manual_sort_key and model._meta.ordering:
orders = [sign + k for k in model._meta.ordering]
items = items.order_by(*orders)
+ """
# pager management
start, end = 0, None
page_nb = 1
try:
- row_nb = int(request_items.get('rows'))
+ row_nb = int(request_items.get('length'))
except (ValueError, TypeError):
- row_nb = None
+ row_nb = DEFAULT_ROW_NUMBER
if row_nb:
try:
- page_nb = int(request_items.get('page'))
+ start = int(request_items.get('start'))
+ page_nb = start / row_nb + 1
assert page_nb >= 1
- except (ValueError, AssertionError):
- pass
- start = (page_nb - 1) * row_nb
+ except (TypeError, ValueError, AssertionError):
+ start = 0
+ page_nb = 1
end = page_nb * row_nb
if full == 'shortcut':
start = 0
end = 20
+
items_nb = items.count()
if manual_sort_key:
items = items.all()