def _build_order_expressions(self, criteria, relationships):
"""
:param criteria: criteria dictionary
:type criteria: dict
:param relationships: a dict with all joins to apply, describes current state in recurrent calls
:type relationships: dict
:return: expressions list
:rtype: list
"""
expressions = []
if isinstance(criteria, dict):
criteria = list(criteria.items())
for arg in criteria:
if isinstance(arg, tuple):
arg, value = arg
else:
value = None
is_ascending = True
if len(arg) and arg[0] == '+' or arg[0] == '-':
is_ascending = arg[:1] == '+'
arg = arg[1:]
expression = self._parse_tokens(self.objects_class, arg.split('__'), value, relationships,
lambda c, n, v: n)
if expression is not None:
expressions.append(expression if is_ascending else desc(expression))
return expressions
评论列表
文章目录