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
801a50b2
Unverified
Commit
801a50b2
authored
Nov 16, 2018
by
Petrus Janse van Rensburg
Committed by
GitHub
Nov 16, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1756 from GrayAn/checkboxlist
CheckboxListField: alternative field for many-to-many relationship
parents
3bd34b10
ff861de7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
68 additions
and
0 deletions
+68
-0
index.rst
doc/api/index.rst
+1
-0
mod_contrib_sqla_fields.rst
doc/api/mod_contrib_sqla_fields.rst
+13
-0
fields.py
flask_admin/contrib/sqla/fields.py
+25
-0
widgets.py
flask_admin/contrib/sqla/widgets.py
+29
-0
No files found.
doc/api/index.rst
View file @
801a50b2
...
@@ -15,6 +15,7 @@ API
...
@@ -15,6 +15,7 @@ API
mod_actions
mod_actions
mod_contrib_sqla
mod_contrib_sqla
mod_contrib_sqla_fields
mod_contrib_mongoengine
mod_contrib_mongoengine
mod_contrib_mongoengine_fields
mod_contrib_mongoengine_fields
mod_contrib_peewee
mod_contrib_peewee
...
...
doc/api/mod_contrib_sqla_fields.rst
0 → 100644
View file @
801a50b2
``flask_admin.contrib.sqla.fields``
===================================
.. automodule:: flask_admin.contrib.sqla.fields
.. autoclass:: QuerySelectField
:members:
.. autoclass:: QuerySelectMultipleField
:members:
.. autoclass:: CheckboxListField
:members:
flask_admin/contrib/sqla/fields.py
View file @
801a50b2
...
@@ -13,6 +13,7 @@ except ImportError:
...
@@ -13,6 +13,7 @@ except ImportError:
from
.tools
import
get_primary_key
from
.tools
import
get_primary_key
from
flask_admin._compat
import
text_type
,
string_types
,
iteritems
from
flask_admin._compat
import
text_type
,
string_types
,
iteritems
from
flask_admin.contrib.sqla.widgets
import
CheckboxListInput
from
flask_admin.form
import
FormOpts
,
BaseForm
,
Select2Widget
from
flask_admin.form
import
FormOpts
,
BaseForm
,
Select2Widget
from
flask_admin.model.fields
import
InlineFieldList
,
InlineModelFormField
from
flask_admin.model.fields
import
InlineFieldList
,
InlineModelFormField
from
flask_admin.babel
import
lazy_gettext
from
flask_admin.babel
import
lazy_gettext
...
@@ -181,6 +182,30 @@ class QuerySelectMultipleField(QuerySelectField):
...
@@ -181,6 +182,30 @@ class QuerySelectMultipleField(QuerySelectField):
raise
ValidationError
(
self
.
gettext
(
u'Not a valid choice'
))
raise
ValidationError
(
self
.
gettext
(
u'Not a valid choice'
))
class
CheckboxListField
(
QuerySelectMultipleField
):
"""
Alternative field for many-to-many relationships.
Can be used instead of `QuerySelectMultipleField`.
Appears as the list of checkboxes.
Example::
class MyView(ModelView):
form_columns = (
'languages',
)
form_args = {
'languages': {
'query_factory': Language.query,
},
}
form_overrides = {
'languages': CheckboxListField,
}
"""
widget
=
CheckboxListInput
()
class
HstoreForm
(
BaseForm
):
class
HstoreForm
(
BaseForm
):
""" Form used in InlineFormField/InlineHstoreList for HSTORE columns """
""" Form used in InlineFormField/InlineHstoreList for HSTORE columns """
key
=
StringField
(
lazy_gettext
(
'Key'
))
key
=
StringField
(
lazy_gettext
(
'Key'
))
...
...
flask_admin/contrib/sqla/widgets.py
0 → 100644
View file @
801a50b2
from
wtforms.widgets.core
import
HTMLString
,
escape
class
CheckboxListInput
:
"""
Alternative widget for many-to-many relationships.
Appears as the list of checkboxes.
"""
template
=
(
'<div class="checkbox">'
' <label>'
' <input id="
%(id)
s" name="
%(name)
s" value="
%(id)
s" '
'type="checkbox"
%(selected)
s>
%(label)
s'
' </label>'
'</div>'
)
def
__call__
(
self
,
field
,
**
kwargs
):
items
=
[]
for
val
,
label
,
selected
in
field
.
iter_choices
():
args
=
{
'id'
:
val
,
'name'
:
field
.
name
,
'label'
:
escape
(
label
),
'selected'
:
' checked'
if
selected
else
''
,
}
items
.
append
(
self
.
template
%
args
)
return
HTMLString
(
''
.
join
(
items
))
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