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
aea3ef30
Commit
aea3ef30
authored
Jan 04, 2016
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1162 from pawl/fix_editable_list2
Fix editable list view - CSRF validation & widget override
parents
2a724048
d96abd19
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
15 additions
and
12 deletions
+15
-12
base.py
flask_admin/model/base.py
+6
-6
form.py
flask_admin/model/form.py
+2
-2
list.html
flask_admin/templates/bootstrap2/admin/model/list.html
+3
-2
list.html
flask_admin/templates/bootstrap3/admin/model/list.html
+4
-2
No files found.
flask_admin/model/base.py
View file @
aea3ef30
...
@@ -1709,11 +1709,6 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1709,11 +1709,6 @@ class BaseModelView(BaseView, ActionsMixin):
"""
"""
List view
List view
"""
"""
if
self
.
column_editable_list
:
form
=
self
.
list_form
else
:
form
=
None
if
self
.
can_delete
:
if
self
.
can_delete
:
delete_form
=
self
.
delete_form
()
delete_form
=
self
.
delete_form
()
else
:
else
:
...
@@ -1731,6 +1726,11 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1731,6 +1726,11 @@ class BaseModelView(BaseView, ActionsMixin):
count
,
data
=
self
.
get_list
(
view_args
.
page
,
sort_column
,
view_args
.
sort_desc
,
count
,
data
=
self
.
get_list
(
view_args
.
page
,
sort_column
,
view_args
.
sort_desc
,
view_args
.
search
,
view_args
.
filters
)
view_args
.
search
,
view_args
.
filters
)
list_forms
=
{}
if
self
.
column_editable_list
:
for
row
in
data
:
list_forms
[
self
.
get_pk_value
(
row
)]
=
self
.
list_form
(
obj
=
row
)
# Calculate number of pages
# Calculate number of pages
if
count
is
not
None
:
if
count
is
not
None
:
num_pages
=
count
//
self
.
page_size
num_pages
=
count
//
self
.
page_size
...
@@ -1767,7 +1767,7 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1767,7 +1767,7 @@ class BaseModelView(BaseView, ActionsMixin):
return
self
.
render
(
return
self
.
render
(
self
.
list_template
,
self
.
list_template
,
data
=
data
,
data
=
data
,
form
=
form
,
list_forms
=
list_forms
,
delete_form
=
delete_form
,
delete_form
=
delete_form
,
# List
# List
...
...
flask_admin/model/form.py
View file @
aea3ef30
...
@@ -33,7 +33,7 @@ def create_editable_list_form(form_base_class, form_class, widget=None):
...
@@ -33,7 +33,7 @@ def create_editable_list_form(form_base_class, form_class, widget=None):
WTForms widget class. Defaults to `XEditableWidget`.
WTForms widget class. Defaults to `XEditableWidget`.
"""
"""
if
widget
is
None
:
if
widget
is
None
:
widget
=
XEditableWidget
widget
=
XEditableWidget
()
class
ListForm
(
form_base_class
):
class
ListForm
(
form_base_class
):
list_form_pk
=
HiddenField
(
validators
=
[
InputRequired
()])
list_form_pk
=
HiddenField
(
validators
=
[
InputRequired
()])
...
@@ -41,7 +41,7 @@ def create_editable_list_form(form_base_class, form_class, widget=None):
...
@@ -41,7 +41,7 @@ def create_editable_list_form(form_base_class, form_class, widget=None):
# iterate FormMeta to get unbound fields, replace widget, copy to ListForm
# iterate FormMeta to get unbound fields, replace widget, copy to ListForm
for
name
,
obj
in
iteritems
(
form_class
.
__dict__
):
for
name
,
obj
in
iteritems
(
form_class
.
__dict__
):
if
isinstance
(
obj
,
UnboundField
):
if
isinstance
(
obj
,
UnboundField
):
obj
.
kwargs
[
'widget'
]
=
XEditableWidget
()
obj
.
kwargs
[
'widget'
]
=
widget
setattr
(
ListForm
,
name
,
obj
)
setattr
(
ListForm
,
name
,
obj
)
if
name
==
"list_form_pk"
:
if
name
==
"list_form_pk"
:
...
...
flask_admin/templates/bootstrap2/admin/model/list.html
View file @
aea3ef30
...
@@ -157,10 +157,11 @@
...
@@ -157,10 +157,11 @@
{% for c, name in list_columns %}
{% for c, name in list_columns %}
<td
class=
"col-{{c}}"
>
<td
class=
"col-{{c}}"
>
{% if admin_view.is_editable(c) %}
{% if admin_view.is_editable(c) %}
{% set form = list_forms[get_pk_value(row)] %}
{% if form.csrf_token %}
{% if form.csrf_token %}
{{ form
(obj=row)
[c](pk=get_pk_value(row), display_value=get_value(row, c), csrf=form.csrf_token._value()) }}
{{ form[c](pk=get_pk_value(row), display_value=get_value(row, c), csrf=form.csrf_token._value()) }}
{% else %}
{% else %}
{{ form
(obj=row)
[c](pk=get_pk_value(row), display_value=get_value(row, c)) }}
{{ form[c](pk=get_pk_value(row), display_value=get_value(row, c)) }}
{% endif %}
{% endif %}
{% else %}
{% else %}
{{ get_value(row, c) }}
{{ get_value(row, c) }}
...
...
flask_admin/templates/bootstrap3/admin/model/list.html
View file @
aea3ef30
...
@@ -153,13 +153,15 @@
...
@@ -153,13 +153,15 @@
</td>
</td>
{%- endif -%}
{%- endif -%}
{% endblock %}
{% endblock %}
{% for c, name in list_columns %}
{% for c, name in list_columns %}
<td
class=
"col-{{c}}"
>
<td
class=
"col-{{c}}"
>
{% if admin_view.is_editable(c) %}
{% if admin_view.is_editable(c) %}
{% set form = list_forms[get_pk_value(row)] %}
{% if form.csrf_token %}
{% if form.csrf_token %}
{{ form
(obj=row)
[c](pk=get_pk_value(row), display_value=get_value(row, c), csrf=form.csrf_token._value()) }}
{{ form[c](pk=get_pk_value(row), display_value=get_value(row, c), csrf=form.csrf_token._value()) }}
{% else %}
{% else %}
{{ form
(obj=row)
[c](pk=get_pk_value(row), display_value=get_value(row, c)) }}
{{ form[c](pk=get_pk_value(row), display_value=get_value(row, c)) }}
{% endif %}
{% endif %}
{% else %}
{% else %}
{{ get_value(row, c) }}
{{ get_value(row, c) }}
...
...
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