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
49e3dea4
Commit
49e3dea4
authored
May 16, 2013
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pass view to the column/type formatting functions
parent
93d94683
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
47 additions
and
33 deletions
+47
-33
view.py
flask_admin/contrib/pymongo/view.py
+3
-21
base.py
flask_admin/model/base.py
+40
-8
typefmt.py
flask_admin/model/typefmt.py
+4
-4
No files found.
flask_admin/contrib/pymongo/view.py
View file @
49e3dea4
...
@@ -123,29 +123,11 @@ class ModelView(BaseModelView):
...
@@ -123,29 +123,11 @@ class ModelView(BaseModelView):
def
scaffold_form
(
self
):
def
scaffold_form
(
self
):
raise
NotImplemented
()
raise
NotImplemented
()
@
contextfunction
def
_get_field_value
(
self
,
model
,
name
):
def
get_list_value
(
self
,
context
,
model
,
name
):
"""
"""
Returns value to be displayed in list view
Get unformatted field value from the model
:param context:
:py:class:`jinja2.runtime.Context`
:param model:
Model instance
:param name:
Field name
"""
"""
column_fmt
=
self
.
column_formatters
.
get
(
name
)
return
model
.
get
(
name
)
if
column_fmt
is
not
None
:
return
column_fmt
(
context
,
model
,
name
)
value
=
model
.
get
(
name
)
type_fmt
=
self
.
column_type_formatters
.
get
(
type
(
value
))
if
type_fmt
is
not
None
:
value
=
type_fmt
(
value
)
return
value
def
get_list
(
self
,
page
,
sort_column
,
sort_desc
,
search
,
filters
,
def
get_list
(
self
,
page
,
sort_column
,
sort_desc
,
search
,
filters
,
execute
=
True
):
execute
=
True
):
...
...
flask_admin/model/base.py
View file @
49e3dea4
import
warnings
from
flask
import
request
,
url_for
,
redirect
,
flash
from
flask
import
request
,
url_for
,
redirect
,
flash
from
jinja2
import
contextfunction
from
jinja2
import
contextfunction
...
@@ -79,14 +81,15 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -79,14 +81,15 @@ class BaseModelView(BaseView, ActionsMixin):
two, you can do something like this::
two, you can do something like this::
class MyModelView(BaseModelView):
class MyModelView(BaseModelView):
column_formatters = dict(price=lambda c, m, p: m.price*2)
column_formatters = dict(price=lambda
v,
c, m, p: m.price*2)
The Callback function has the prototype::
The Callback function has the prototype::
def formatter(context, model, name):
def formatter(view, context, model, name):
# context is instance of jinja2.runtime.Context
# `view` is current administrative view
# model is model instance
# `context` is instance of jinja2.runtime.Context
# name is property name
# `model` is model instance
# `name` is property name
pass
pass
"""
"""
...
@@ -117,6 +120,13 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -117,6 +120,13 @@ class BaseModelView(BaseView, ActionsMixin):
column_type_formatters = MY_DEFAULT_FORMATTERS
column_type_formatters = MY_DEFAULT_FORMATTERS
Type formatters have lower priority than list column formatters.
Type formatters have lower priority than list column formatters.
The callback function has following prototype::
def type_formatter(view, value):
# `view` is current administrative view
# `value` value to format
pass
"""
"""
column_labels
=
ObsoleteAttr
(
'column_labels'
,
'rename_columns'
,
None
)
column_labels
=
ObsoleteAttr
(
'column_labels'
,
'rename_columns'
,
None
)
...
@@ -841,6 +851,12 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -841,6 +851,12 @@ class BaseModelView(BaseView, ActionsMixin):
"""
"""
return
name
not
in
self
.
action_disallowed_list
return
name
not
in
self
.
action_disallowed_list
def
_get_field_value
(
self
,
model
,
name
):
"""
Get unformatted field value from the model
"""
return
rec_getattr
(
model
,
name
)
@
contextfunction
@
contextfunction
def
get_list_value
(
self
,
context
,
model
,
name
):
def
get_list_value
(
self
,
context
,
model
,
name
):
"""
"""
...
@@ -855,9 +871,17 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -855,9 +871,17 @@ class BaseModelView(BaseView, ActionsMixin):
"""
"""
column_fmt
=
self
.
column_formatters
.
get
(
name
)
column_fmt
=
self
.
column_formatters
.
get
(
name
)
if
column_fmt
is
not
None
:
if
column_fmt
is
not
None
:
return
column_fmt
(
context
,
model
,
name
)
try
:
return
column_fmt
(
self
,
context
,
model
,
name
)
except
TypeError
:
warnings
.
warn
(
'Column formatter prototype was changed to accept view as first input parameter.
\n
'
+
'Please update
%
s
%
s formatter to accept 4 parameters.'
%
(
self
.
name
,
name
),
stacklevel
=
2
)
self
.
column_formatters
[
name
]
=
lambda
_
,
c
,
m
,
n
:
column_fmt
(
c
,
m
,
n
)
return
column_fmt
(
context
,
model
,
name
)
value
=
rec_getattr
(
model
,
name
)
value
=
self
.
_get_field_value
(
model
,
name
)
choices_map
=
self
.
_column_choices_map
.
get
(
name
,
{})
choices_map
=
self
.
_column_choices_map
.
get
(
name
,
{})
if
choices_map
:
if
choices_map
:
...
@@ -865,7 +889,15 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -865,7 +889,15 @@ class BaseModelView(BaseView, ActionsMixin):
type_fmt
=
self
.
column_type_formatters
.
get
(
type
(
value
))
type_fmt
=
self
.
column_type_formatters
.
get
(
type
(
value
))
if
type_fmt
is
not
None
:
if
type_fmt
is
not
None
:
value
=
type_fmt
(
value
)
try
:
value
=
type_fmt
(
self
,
value
)
except
TypeError
:
warnings
.
warn
(
'Type formatter prototype was changed to accept view as first input parameter.
\n
'
+
'Please update
%
s
%
s formatter to accept 2 parameters.'
%
(
self
.
name
,
type
(
value
)),
stacklevel
=
2
)
self
.
column_type_formatters
[
type
(
value
)]
=
lambda
_
,
value
:
type_fmt
(
value
)
value
=
type_fmt
(
value
)
return
value
return
value
...
...
flask_admin/model/typefmt.py
View file @
49e3dea4
from
jinja2
import
Markup
from
jinja2
import
Markup
def
null_formatter
(
value
):
def
null_formatter
(
v
iew
,
v
alue
):
"""
"""
Return `NULL` as the string for `None` value
Return `NULL` as the string for `None` value
...
@@ -11,7 +11,7 @@ def null_formatter(value):
...
@@ -11,7 +11,7 @@ def null_formatter(value):
return
Markup
(
'<i>NULL</i>'
)
return
Markup
(
'<i>NULL</i>'
)
def
empty_formatter
(
value
):
def
empty_formatter
(
v
iew
,
v
alue
):
"""
"""
Return empty string for `None` value
Return empty string for `None` value
...
@@ -21,7 +21,7 @@ def empty_formatter(value):
...
@@ -21,7 +21,7 @@ def empty_formatter(value):
return
''
return
''
def
bool_formatter
(
value
):
def
bool_formatter
(
v
iew
,
v
alue
):
"""
"""
Return check icon if value is `True` or empty string otherwise.
Return check icon if value is `True` or empty string otherwise.
...
@@ -31,7 +31,7 @@ def bool_formatter(value):
...
@@ -31,7 +31,7 @@ def bool_formatter(value):
return
Markup
(
'<i class="icon-ok"></i>'
if
value
else
''
)
return
Markup
(
'<i class="icon-ok"></i>'
if
value
else
''
)
def
list_formatter
(
values
):
def
list_formatter
(
v
iew
,
v
alues
):
"""
"""
Return string with comma separated values
Return string with comma separated values
...
...
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