|
2 | 2 |
|
3 | 3 | from sqlalchemy.orm.exc import NoResultFound |
4 | 4 | from sqlalchemy.orm.collections import InstrumentedList |
5 | | -from sqlalchemy.sql.expression import desc, asc, text |
6 | 5 | from sqlalchemy.inspection import inspect |
7 | 6 |
|
8 | 7 | from flask_rest_jsonapi.constants import DEFAULT_PAGE_SIZE |
@@ -425,15 +424,12 @@ def sort_query(self, query, sort_info): |
425 | 424 | :param list sort_info: sort information |
426 | 425 | :return Query: the sorted query |
427 | 426 | """ |
428 | | - expressions = {'asc': asc, 'desc': desc} |
429 | | - order_objects = [] |
430 | 427 | for sort_opt in sort_info: |
431 | | - if not hasattr(self.model, sort_opt['field']): |
432 | | - raise InvalidSort("{} has no attribute {}".format(self.model.__name__, sort_opt['field'])) |
433 | | - field = text(sort_opt['field']) |
434 | | - order = expressions[sort_opt['order']] |
435 | | - order_objects.append(order(field)) |
436 | | - return query.order_by(*order_objects) |
| 428 | + field = sort_opt['field'] |
| 429 | + if not hasattr(self.model, field): |
| 430 | + raise InvalidSort("{} has no attribute {}".format(self.model.__name__, field)) |
| 431 | + query = query.order_by(getattr(getattr(self.model, field), sort_opt['order'])()) |
| 432 | + return query |
437 | 433 |
|
438 | 434 | def paginate_query(self, query, paginate_info): |
439 | 435 | """Paginate query according to jsonapi 1.0 |
|
0 commit comments