Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
flask-admin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Python-Dev
flask-admin
Commits
ac1db34e
Unverified
Commit
ac1db34e
authored
Jan 18, 2018
by
jbochi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Multi column support for column_default_sort
parent
2c2c98e0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
34 additions
and
26 deletions
+34
-26
view.py
flask_admin/contrib/mongoengine/view.py
+3
-1
view.py
flask_admin/contrib/peewee/view.py
+16
-10
view.py
flask_admin/contrib/pymongo/view.py
+2
-1
view.py
flask_admin/contrib/sqla/view.py
+3
-12
base.py
flask_admin/model/base.py
+10
-2
No files found.
flask_admin/contrib/mongoengine/view.py
View file @
ac1db34e
...
...
@@ -520,7 +520,9 @@ class ModelView(BaseModelView):
order
=
self
.
_get_default_order
()
if
order
:
query
=
query
.
order_by
(
'
%
s
%
s'
%
(
'-'
if
order
[
1
]
else
''
,
order
[
0
]))
keys
=
[
'
%
s
%
s'
%
(
'-'
if
desc
else
''
,
col
)
for
(
desc
,
col
)
in
order
]
query
=
query
.
order_by
(
*
keys
)
# Pagination
if
page_size
is
None
:
...
...
flask_admin/contrib/peewee/view.py
View file @
ac1db34e
...
...
@@ -316,17 +316,24 @@ class ModelView(BaseModelView):
return
query
def
_order_by
(
self
,
query
,
joins
,
sort_field
,
sort_desc
):
def
_order_by
(
self
,
query
,
joins
,
order
):
clauses
=
[]
for
sort_field
,
sort_desc
in
order
:
query
,
joins
,
clause
=
self
.
_sort_clause
(
query
,
joins
,
sort_field
,
sort_desc
)
clauses
.
append
(
clause
)
query
=
query
.
order_by
(
*
clauses
)
return
query
,
joins
def
_sort_clause
(
self
,
query
,
joins
,
sort_field
,
sort_desc
):
if
isinstance
(
sort_field
,
string_types
):
field
=
getattr
(
self
.
model
,
sort_field
)
query
=
query
.
order_by
(
field
.
desc
()
if
sort_desc
else
field
.
asc
()
)
clause
=
field
.
desc
()
if
sort_desc
else
field
.
asc
(
)
elif
isinstance
(
sort_field
,
Field
):
if
sort_field
.
model_class
!=
self
.
model
:
query
=
self
.
_handle_join
(
query
,
sort_field
,
joins
)
query
=
query
.
order_by
(
sort_field
.
desc
()
if
sort_desc
else
sort_field
.
asc
())
return
query
,
joins
clause
=
sort_field
.
desc
()
if
sort_desc
else
sort_field
.
asc
()
return
query
,
joins
,
clause
def
get_query
(
self
):
return
self
.
model
.
select
()
...
...
@@ -395,13 +402,12 @@ class ModelView(BaseModelView):
# Apply sorting
if
sort_column
is
not
None
:
sort_field
=
self
.
_sortable_columns
[
sort_column
]
query
,
joins
=
self
.
_order_by
(
query
,
joins
,
sort_field
,
sort_desc
)
order
=
[(
sort_field
,
sort_desc
)]
query
,
joins
=
self
.
_order_by
(
query
,
joins
,
order
)
else
:
order
=
self
.
_get_default_order
()
if
order
:
query
,
joins
=
self
.
_order_by
(
query
,
joins
,
order
[
0
],
order
[
1
]
)
query
,
joins
=
self
.
_order_by
(
query
,
joins
,
order
)
# Pagination
if
page_size
is
None
:
...
...
flask_admin/contrib/pymongo/view.py
View file @
ac1db34e
...
...
@@ -262,7 +262,8 @@ class ModelView(BaseModelView):
order
=
self
.
_get_default_order
()
if
order
:
sort_by
=
[(
order
[
0
],
pymongo
.
DESCENDING
if
order
[
1
]
else
pymongo
.
ASCENDING
)]
sort_by
=
[(
col
,
pymongo
.
DESCENDING
if
desc
else
pymongo
.
ASCENDING
)
for
(
col
,
desc
)
in
order
]
# Pagination
if
page_size
is
None
:
...
...
flask_admin/contrib/sqla/view.py
View file @
ac1db34e
...
...
@@ -842,15 +842,9 @@ class ModelView(BaseModelView):
def
_get_default_order
(
self
):
order
=
super
(
ModelView
,
self
)
.
_get_default_order
()
if
order
is
not
None
:
field
,
direction
=
order
for
field
,
direction
in
(
order
or
[]):
attr
,
joins
=
tools
.
get_field_with_path
(
self
.
model
,
field
)
return
attr
,
joins
,
direction
return
None
yield
attr
,
joins
,
direction
def
_apply_sorting
(
self
,
query
,
joins
,
sort_column
,
sort_desc
):
if
sort_column
is
not
None
:
...
...
@@ -861,10 +855,7 @@ class ModelView(BaseModelView):
query
,
joins
=
self
.
_order_by
(
query
,
joins
,
sort_joins
,
sort_field
,
sort_desc
)
else
:
order
=
self
.
_get_default_order
()
if
order
:
sort_field
,
sort_joins
,
sort_desc
=
order
for
sort_field
,
sort_joins
,
sort_desc
in
order
:
query
,
joins
=
self
.
_order_by
(
query
,
joins
,
sort_joins
,
sort_field
,
sort_desc
)
return
query
,
joins
...
...
flask_admin/model/base.py
View file @
ac1db34e
...
...
@@ -381,6 +381,12 @@ class BaseModelView(BaseView, ActionsMixin):
class MyModelView(BaseModelView):
column_default_sort = ('user', True)
If you want to sort by more than one column,
you can pass a list of tuples::
class MyModelView(BaseModelView):
column_default_sort = [('name', True), ('last_name', True)]
"""
column_searchable_list
=
ObsoleteAttr
(
'column_searchable_list'
,
...
...
@@ -1435,10 +1441,12 @@ class BaseModelView(BaseView, ActionsMixin):
Return default sort order
"""
if
self
.
column_default_sort
:
if
isinstance
(
self
.
column_default_sort
,
tuple
):
if
isinstance
(
self
.
column_default_sort
,
list
):
return
self
.
column_default_sort
if
isinstance
(
self
.
column_default_sort
,
tuple
):
return
[
self
.
column_default_sort
]
else
:
return
self
.
column_default_sort
,
False
return
[(
self
.
column_default_sort
,
False
)]
return
None
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment