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
794aa776
Commit
794aa776
authored
Dec 01, 2013
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed #361. 'widget_args' are now passed to the InlineFormField
parent
248d6be8
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
36 additions
and
42 deletions
+36
-42
simple.py
examples/mongoengine/simple.py
+6
-1
simple.py
examples/sqla/simple.py
+1
-1
form.py
flask_admin/contrib/mongoengine/form.py
+5
-2
__init__.py
flask_admin/form/__init__.py
+4
-13
base.py
flask_admin/model/base.py
+9
-5
widgets.py
flask_admin/model/widgets.py
+3
-12
lib.html
flask_admin/templates/admin/lib.html
+5
-5
create.html
flask_admin/templates/admin/model/create.html
+1
-1
edit.html
flask_admin/templates/admin/model/edit.html
+1
-1
inline_form.html
flask_admin/templates/admin/model/inline_form.html
+1
-1
No files found.
examples/mongoengine/simple.py
View file @
794aa776
...
...
@@ -100,7 +100,12 @@ class PostView(ModelView):
'form_subdocuments'
:
{
None
:
{
# Add <hr> at the end of the form
'form_rules'
:
(
'name'
,
'tag'
,
'value'
,
rules
.
HTML
(
'<hr>'
))
'form_rules'
:
(
'name'
,
'tag'
,
'value'
,
rules
.
HTML
(
'<hr>'
)),
'form_widget_args'
:
{
'name'
:
{
'style'
:
'color: red'
}
}
}
}
}
...
...
examples/sqla/simple.py
View file @
794aa776
import
os
import
os.path
as
op
from
flask
import
Flask
from
flask.ext.sqlalchemy
import
SQLAlchemy
...
...
@@ -261,7 +262,6 @@ def build_sample_db():
return
if
__name__
==
'__main__'
:
# Build a sample db on the fly, if one does not exist yet.
app_dir
=
op
.
realpath
(
os
.
path
.
dirname
(
__file__
))
database_path
=
op
.
join
(
app_dir
,
app
.
config
[
'DATABASE_FILE'
])
...
...
flask_admin/contrib/mongoengine/form.py
View file @
794aa776
...
...
@@ -7,7 +7,7 @@ from flask.ext.mongoengine.wtf import orm, fields as mongo_fields
from
flask.ext.admin
import
form
from
flask.ext.admin.model.form
import
FieldPlaceholder
from
flask.ext.admin.model.fields
import
InlineFieldList
,
AjaxSelectField
,
AjaxSelectMultipleField
from
flask.ext.admin.model.widgets
import
InlineForm
Rule
Widget
from
flask.ext.admin.model.widgets
import
InlineFormWidget
from
flask.ext.admin._compat
import
iteritems
from
.fields
import
ModelFormField
,
MongoFileField
,
MongoImageField
...
...
@@ -138,7 +138,10 @@ class CustomModelConverter(orm.ModelConverter):
view
=
self
.
_get_subdocument_config
(
field
.
name
)
if
'widget'
not
in
kwargs
:
kwargs
[
'widget'
]
=
InlineFormRuleWidget
(
view
.
_form_rules
)
form_opts
=
form
.
FormOpts
(
widget_args
=
getattr
(
view
,
'form_widget_args'
,
None
),
form_rules
=
view
.
_form_rules
)
kwargs
[
'widget'
]
=
InlineFormWidget
(
form_opts
)
form_class
=
view
.
get_form
()
if
form_class
is
None
:
...
...
flask_admin/form/__init__.py
View file @
794aa776
...
...
@@ -14,10 +14,11 @@ class BaseForm(form.Form):
class
FormOpts
(
object
):
__slots__
=
[
'widget_args'
]
__slots__
=
[
'widget_args'
,
'form_rules'
]
def
__init__
(
self
,
widget_args
):
self
.
widget_args
=
widget_args
def
__init__
(
self
,
widget_args
=
None
,
form_rules
=
None
):
self
.
widget_args
=
widget_args
or
{}
self
.
form_rules
=
form_rules
def
recreate_field
(
unbound
):
...
...
@@ -31,13 +32,3 @@ def recreate_field(unbound):
raise
ValueError
(
'recreate_field expects UnboundField instance,
%
s was passed.'
%
type
(
unbound
))
return
unbound
.
field_class
(
*
unbound
.
args
,
**
unbound
.
kwargs
)
def
get_form_opts
(
view
):
"""
Return form options object from the view.
:param view:
Administrative view or inline model configuration class.
"""
return
FormOpts
(
getattr
(
view
,
'form_widget_args'
,
{}))
flask_admin/model/base.py
View file @
794aa776
...
...
@@ -7,7 +7,7 @@ from jinja2 import contextfunction
from
flask.ext.admin.babel
import
gettext
from
flask.ext.admin.base
import
BaseView
,
expose
from
flask.ext.admin.form
import
BaseForm
,
rules
,
get_form_opt
s
from
flask.ext.admin.form
import
BaseForm
,
FormOpts
,
rule
s
from
flask.ext.admin.model
import
filters
,
typefmt
from
flask.ext.admin.actions
import
ActionsMixin
from
flask.ext.admin.helpers
import
get_form_data
,
validate_form_on_submit
...
...
@@ -1215,10 +1215,12 @@ class BaseModelView(BaseView, ActionsMixin):
else
:
return
redirect
(
return_url
)
form_opts
=
FormOpts
(
widget_args
=
self
.
form_widget_args
,
form_rules
=
self
.
_form_create_rules
)
return
self
.
render
(
self
.
create_template
,
form
=
form
,
form_opts
=
get_form_opts
(
self
),
form_rules
=
self
.
_form_create_rules
,
form_opts
=
form_opts
,
return_url
=
return_url
)
@
expose
(
'/edit/'
,
methods
=
(
'GET'
,
'POST'
))
...
...
@@ -1250,11 +1252,13 @@ class BaseModelView(BaseView, ActionsMixin):
else
:
return
redirect
(
return_url
)
form_opts
=
FormOpts
(
widget_args
=
self
.
form_widget_args
,
form_rules
=
self
.
_form_create_rules
)
return
self
.
render
(
self
.
edit_template
,
model
=
model
,
form
=
form
,
form_opts
=
get_form_opts
(
self
),
form_rules
=
self
.
_form_edit_rules
,
form_opts
=
form_opts
,
return_url
=
return_url
)
@
expose
(
'/delete/'
,
methods
=
(
'POST'
,))
...
...
flask_admin/model/widgets.py
View file @
794aa776
...
...
@@ -12,24 +12,15 @@ class InlineFieldListWidget(RenderTemplateWidget):
class
InlineFormWidget
(
RenderTemplateWidget
):
def
__init__
(
self
):
def
__init__
(
self
,
form_opts
=
None
):
super
(
InlineFormWidget
,
self
)
.
__init__
(
'admin/model/inline_form.html'
)
self
.
form_opts
=
form_opts
def
__call__
(
self
,
field
,
**
kwargs
):
kwargs
.
setdefault
(
'form_
rules'
,
None
)
kwargs
.
setdefault
(
'form_
opts'
,
self
.
form_opts
)
return
super
(
InlineFormWidget
,
self
)
.
__call__
(
field
,
**
kwargs
)
class
InlineFormRuleWidget
(
InlineFormWidget
):
def
__init__
(
self
,
rule_set
):
super
(
InlineFormRuleWidget
,
self
)
.
__init__
()
self
.
rule_set
=
rule_set
def
__call__
(
self
,
field
,
**
kwargs
):
kwargs
[
'form_rules'
]
=
self
.
rule_set
return
super
(
InlineFormRuleWidget
,
self
)
.
__call__
(
field
,
**
kwargs
)
class
AjaxSelect2Widget
(
object
):
def
__init__
(
self
,
multiple
=
False
):
self
.
multiple
=
multiple
...
...
flask_admin/templates/admin/lib.html
View file @
794aa776
...
...
@@ -108,7 +108,7 @@
<h3>
{{ text }}
</h3>
{% endmacro %}
{% macro render_form_fields(form, form_opts=
{}, form_rules=
None) %}
{% macro render_form_fields(form, form_opts=None) %}
{% if form.hidden_tag is defined %}
{{ form.hidden_tag() }}
{% else %}
...
...
@@ -120,8 +120,8 @@
{% endfor %}
{% endif %}
{% if form_rules %}
{% for r in form_rules %}
{% if form_
opts and form_opts.form_
rules %}
{% for r in form_
opts.form_
rules %}
{{ r(form, form_opts=form_opts) }}
{% endfor %}
{% else %}
...
...
@@ -158,9 +158,9 @@
</div>
{% endmacro %}
{% macro render_form(form, cancel_url, extra=None, form_opts=
{}, form_rules=
None) -%}
{% macro render_form(form, cancel_url, extra=None, form_opts=None) -%}
{% call form_tag() %}
{{ render_form_fields(form, form_opts=form_opts
, form_rules=form_rules
) }}
{{ render_form_fields(form, form_opts=form_opts) }}
{{ render_form_buttons(cancel_url, extra) }}
{% endcall %}
{% endmacro %}
flask_admin/templates/admin/model/create.html
View file @
794aa776
...
...
@@ -23,7 +23,7 @@
</ul>
{% call lib.form_tag(form) %}
{{ lib.render_form_fields(form, form_opts=form_opts
, form_rules=form_rules
) }}
{{ lib.render_form_fields(form, form_opts=form_opts) }}
{{ lib.render_form_buttons(return_url, extra()) }}
{% endcall %}
{% endblock %}
...
...
flask_admin/templates/admin/model/edit.html
View file @
794aa776
...
...
@@ -14,7 +14,7 @@
{% block body %}
{% call lib.form_tag(form) %}
{{ lib.render_form_fields(form, form_opts=form_opts
, form_rules=form_rules
) }}
{{ lib.render_form_fields(form, form_opts=form_opts) }}
{{ lib.render_form_buttons(return_url, extra()) }}
{% endcall %}
{% endblock %}
...
...
flask_admin/templates/admin/model/inline_form.html
View file @
794aa776
{% import 'admin/lib.html' as lib with context %}
<div
class=
"fa-inline-field"
>
{{ lib.render_form_fields(field.form, form_
rules=form_rule
s) }}
{{ lib.render_form_fields(field.form, form_
opts=form_opt
s) }}
</div>
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