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
128d5e00
Commit
128d5e00
authored
Sep 16, 2015
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1052 from radioprotector/customizable-export-columns
Add customization options for export columns
parents
d73ef0e2
d4100d5f
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
71 additions
and
2 deletions
+71
-2
base.py
flask_admin/model/base.py
+39
-2
test_model.py
flask_admin/tests/test_model.py
+32
-0
No files found.
flask_admin/model/base.py
View file @
128d5e00
...
...
@@ -168,6 +168,17 @@ class BaseModelView(BaseView, ActionsMixin):
Collection of fields excluded from the details view.
"""
column_export_list
=
None
"""
Collection of the field names included in the export.
If set to `None`, will get them from the model.
"""
column_export_exclude_list
=
None
"""
Collection of fields excluded from the export.
"""
column_formatters
=
ObsoleteAttr
(
'column_formatters'
,
'list_formatters'
,
dict
())
"""
Dictionary of list view column formatters.
...
...
@@ -748,6 +759,10 @@ class BaseModelView(BaseView, ActionsMixin):
if
self
.
can_view_details
:
self
.
_details_columns
=
self
.
get_details_columns
()
# Export view
if
self
.
can_export
:
self
.
_export_columns
=
self
.
get_export_columns
()
# Labels
if
self
.
column_labels
is
None
:
self
.
column_labels
=
{}
...
...
@@ -858,6 +873,28 @@ class BaseModelView(BaseView, ActionsMixin):
return
[(
c
,
self
.
get_column_name
(
c
))
for
c
in
columns
]
def
get_export_columns
(
self
):
"""
Returns a list of the model field names in the export view. If
`column_export_list` was set, returns it. Otherwise, if
`column_list` was set, returns it. Otherwise calls
`scaffold_list_columns` to generate the list from the model.
"""
columns
=
self
.
column_export_list
if
columns
is
None
:
columns
=
self
.
column_list
if
columns
is
None
:
columns
=
self
.
scaffold_list_columns
()
# Filter excluded columns
if
self
.
column_export_exclude_list
:
columns
=
[
c
for
c
in
columns
if
c
not
in
self
.
column_export_exclude_list
]
return
[(
c
,
self
.
get_column_name
(
c
))
for
c
in
columns
]
def
scaffold_sortable_columns
(
self
):
"""
Returns dictionary of sortable columns. Must be implemented in
...
...
@@ -1963,12 +2000,12 @@ class BaseModelView(BaseView, ActionsMixin):
def
generate
():
# Append the column titles at the beginning
titles
=
[
csv_encode
(
c
[
1
])
for
c
in
self
.
_
lis
t_columns
]
titles
=
[
csv_encode
(
c
[
1
])
for
c
in
self
.
_
expor
t_columns
]
yield
writer
.
writerow
(
titles
)
for
row
in
data
:
vals
=
[
csv_encode
(
self
.
get_export_value
(
row
,
c
[
0
]))
for
c
in
self
.
_
lis
t_columns
]
for
c
in
self
.
_
expor
t_columns
]
yield
writer
.
writerow
(
vals
)
filename
=
'
%
s_
%
s.csv'
%
(
self
.
name
,
...
...
flask_admin/tests/test_model.py
View file @
128d5e00
...
...
@@ -579,6 +579,38 @@ def test_export_csv():
"col1_2,col2_2
\r\n
"
"col1_3,col2_3
\r\n
"
==
data
)
# test explicit use of column_export_list
view
=
MockModelView
(
Model
,
view_data
,
can_export
=
True
,
column_list
=
[
'col1'
,
'col2'
],
column_export_list
=
[
'id'
,
'col1'
,
'col2'
],
endpoint
=
'exportinclusion'
)
admin
.
add_view
(
view
)
rv
=
client
.
get
(
'/admin/exportinclusion/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
mimetype
,
'text/csv'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
"Id,Col1,Col2
\r\n
"
"1,col1_1,col2_1
\r\n
"
"2,col1_2,col2_2
\r\n
"
"3,col1_3,col2_3
\r\n
"
==
data
)
# test explicit use of column_export_exclude_list
view
=
MockModelView
(
Model
,
view_data
,
can_export
=
True
,
column_list
=
[
'col1'
,
'col2'
],
column_export_exclude_list
=
[
'col2'
],
endpoint
=
'exportexclusion'
)
admin
.
add_view
(
view
)
rv
=
client
.
get
(
'/admin/exportexclusion/export/csv/'
)
data
=
rv
.
data
.
decode
(
'utf-8'
)
eq_
(
rv
.
mimetype
,
'text/csv'
)
eq_
(
rv
.
status_code
,
200
)
ok_
(
"Col1
\r\n
"
"col1_1
\r\n
"
"col1_2
\r\n
"
"col1_3
\r\n
"
==
data
)
# test utf8 characters in csv export
view_data
[
4
]
=
Model
(
1
,
u'
\u2013
ut8_1
\u2013
'
,
u'
\u2013
utf8_2
\u2013
'
)
view
=
MockModelView
(
Model
,
view_data
,
can_export
=
True
,
...
...
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