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
0a1dcfbb
Commit
0a1dcfbb
authored
Oct 17, 2012
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #96 from ArtemSerga/master
Add form field for tags and PostgreSQL ARRAY field support
parents
be2cec68
55816bd5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
0 deletions
+41
-0
form.py
flask_admin/contrib/sqlamodel/form.py
+3
-0
form.py
flask_admin/form.py
+34
-0
form.js
flask_admin/static/js/form.js
+4
-0
No files found.
flask_admin/contrib/sqlamodel/form.py
View file @
0a1dcfbb
...
@@ -240,6 +240,9 @@ class AdminModelConverter(ModelConverterBase):
...
@@ -240,6 +240,9 @@ class AdminModelConverter(ModelConverterBase):
field_args
[
'validators'
]
.
append
(
validators
.
UUID
())
field_args
[
'validators'
]
.
append
(
validators
.
UUID
())
return
fields
.
TextField
(
**
field_args
)
return
fields
.
TextField
(
**
field_args
)
@
converts
(
'sqlalchemy.dialects.postgresql.base.ARRAY'
)
def
conv_ARRAY
(
self
,
field_args
,
**
extra
):
return
form
.
Select2TagsField
(
save_as_list
=
True
,
**
field_args
)
# Get list of fields and generate form
# Get list of fields and generate form
def
get_form
(
model
,
converter
,
def
get_form
(
model
,
converter
,
...
...
flask_admin/form.py
View file @
0a1dcfbb
...
@@ -152,3 +152,37 @@ class RenderTemplateWidget(object):
...
@@ -152,3 +152,37 @@ class RenderTemplateWidget(object):
template
=
jinja_env
.
get_template
(
self
.
template
)
template
=
jinja_env
.
get_template
(
self
.
template
)
return
template
.
render
(
kwargs
)
return
template
.
render
(
kwargs
)
class
Select2TagsWidget
(
widgets
.
TextInput
):
"""`Select2 <http://ivaynberg.github.com/select2/#tags>`_ styled text widget.
You must include select2.js, form.js and select2 stylesheet for it to work.
"""
def
__call__
(
self
,
field
,
**
kwargs
):
kwargs
[
'data-role'
]
=
u'select2tags'
return
super
(
Select2TagsWidget
,
self
)
.
__call__
(
field
,
**
kwargs
)
class
Select2TagsField
(
fields
.
TextField
):
"""`Select2 <http://ivaynberg.github.com/select2/#tags>`_ styled text field.
You must include select2.js, form.js and select2 stylesheet for it to work.
"""
widget
=
Select2TagsWidget
()
def
__init__
(
self
,
label
=
None
,
validators
=
None
,
save_as_list
=
False
,
**
kwargs
):
"""Initialization
:param save_as_list:
If `True` then populate ``obj`` using list else string
"""
self
.
save_as_list
=
save_as_list
super
(
Select2TagsField
,
self
)
.
__init__
(
label
,
validators
,
**
kwargs
)
def
process_formdata
(
self
,
valuelist
):
if
self
.
save_as_list
:
self
.
data
=
[
v
.
strip
()
for
v
in
valuelist
[
0
]
.
split
(
','
)
if
v
.
strip
()]
else
:
self
.
data
=
valuelist
[
0
]
def
_value
(
self
):
return
u', '
.
join
(
self
.
data
)
if
isinstance
(
self
.
data
,
list
)
else
self
.
data
flask_admin/static/js/form.js
View file @
0a1dcfbb
...
@@ -8,6 +8,9 @@
...
@@ -8,6 +8,9 @@
case
'select2blank'
:
case
'select2blank'
:
$
(
el
).
select2
({
allowClear
:
true
,
width
:
'resolve'
});
$
(
el
).
select2
({
allowClear
:
true
,
width
:
'resolve'
});
break
;
break
;
case
'select2tags'
:
$
(
el
).
select2
({
tags
:
[],
tokenSeparators
:
[
','
],
width
:
'resolve'
});
break
;
case
'datepicker'
:
case
'datepicker'
:
$
(
el
).
datepicker
();
$
(
el
).
datepicker
();
break
;
break
;
...
@@ -51,6 +54,7 @@
...
@@ -51,6 +54,7 @@
this
.
applyGlobalStyles
=
function
(
parent
)
{
this
.
applyGlobalStyles
=
function
(
parent
)
{
$
(
'[data-role=select2]'
,
parent
).
select2
({
width
:
'resolve'
});
$
(
'[data-role=select2]'
,
parent
).
select2
({
width
:
'resolve'
});
$
(
'[data-role=select2blank]'
,
parent
).
select2
({
allowClear
:
true
,
width
:
'resolve'
});
$
(
'[data-role=select2blank]'
,
parent
).
select2
({
allowClear
:
true
,
width
:
'resolve'
});
$
(
'[data-role=select2tags]'
,
parent
).
select2
({
tags
:
[],
tokenSeparators
:
[
','
],
width
:
'resolve'
});
$
(
'[data-role=datepicker]'
,
parent
).
datepicker
();
$
(
'[data-role=datepicker]'
,
parent
).
datepicker
();
$
(
'[data-role=datetimepicker]'
,
parent
).
datepicker
({
displayTime
:
true
});
$
(
'[data-role=datetimepicker]'
,
parent
).
datepicker
({
displayTime
:
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