Commit ff109e6f authored by PJ Janse van Rensburg's avatar PJ Janse van Rensburg

Merge branch 'feature_multiple_default_sort' of...

Merge branch 'feature_multiple_default_sort' of https://github.com/stepsame/flask-admin into sqla-sort-multiple
parents 1f3d1b72 7bd79342
...@@ -484,13 +484,21 @@ class ModelView(BaseModelView): ...@@ -484,13 +484,21 @@ class ModelView(BaseModelView):
for c in self.column_sortable_list: for c in self.column_sortable_list:
if isinstance(c, tuple): if isinstance(c, tuple):
if isinstance(c[1], tuple):
column, path = [], []
for item in c[1]:
column_item, path_item = tools.get_field_with_path(self.model, item)
column.append(column_item)
path.append(path_item)
column_name = c[0]
else:
column, path = tools.get_field_with_path(self.model, c[1]) column, path = tools.get_field_with_path(self.model, c[1])
column_name = c[0] column_name = c[0]
else: else:
column, path = tools.get_field_with_path(self.model, c) column, path = tools.get_field_with_path(self.model, c)
column_name = text_type(c) column_name = text_type(c)
if path and hasattr(path[0], 'property'): if path and (hasattr(path[0], 'property') or isinstance(path[0], list)):
self._sortable_joins[column_name] = path self._sortable_joins[column_name] = path
elif path: elif path:
raise Exception("For sorting columns in a related table, " raise Exception("For sorting columns in a related table, "
...@@ -836,13 +844,7 @@ class ModelView(BaseModelView): ...@@ -836,13 +844,7 @@ class ModelView(BaseModelView):
column = sort_field if alias is None else getattr(alias, sort_field.key) column = sort_field if alias is None else getattr(alias, sort_field.key)
if sort_desc: if sort_desc:
if isinstance(column, tuple):
query = query.order_by(*map(desc, column))
else:
query = query.order_by(desc(column)) query = query.order_by(desc(column))
else:
if isinstance(column, tuple):
query = query.order_by(*column)
else: else:
query = query.order_by(column) query = query.order_by(column)
...@@ -860,6 +862,10 @@ class ModelView(BaseModelView): ...@@ -860,6 +862,10 @@ class ModelView(BaseModelView):
sort_field = self._sortable_columns[sort_column] sort_field = self._sortable_columns[sort_column]
sort_joins = self._sortable_joins.get(sort_column) sort_joins = self._sortable_joins.get(sort_column)
if isinstance(sort_field, list):
for field_item, join_item in zip(sort_field, sort_joins):
query, joins = self._order_by(query, joins, join_item, field_item, sort_desc)
else:
query, joins = self._order_by(query, joins, sort_joins, sort_field, sort_desc) query, joins = self._order_by(query, joins, sort_joins, sort_field, sort_desc)
else: else:
order = self._get_default_order() order = self._get_default_order()
......
...@@ -382,6 +382,12 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -382,6 +382,12 @@ class BaseModelView(BaseView, ActionsMixin):
class MyModelView(BaseModelView): class MyModelView(BaseModelView):
column_sortable_list = ('name', ('user', 'user.username')) column_sortable_list = ('name', ('user', 'user.username'))
You can also specify multiple fields to be used while sorting::
class MyModelView(BaseModelView):
column_sortable_list = (
'name', ('user', ('user.first_name', 'user.last_name')))
When using SQLAlchemy models, model attributes can be used instead When using SQLAlchemy models, model attributes can be used instead
of strings:: of strings::
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment