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
aeeb83c7
Commit
aeeb83c7
authored
Oct 18, 2018
by
PJ Janse van Rensburg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge 'filter-selectable' example into 'sqla'.
parent
204b05c1
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
40 additions
and
113 deletions
+40
-113
README.rst
examples/sqla-filter-selectable/README.rst
+0
-21
__init__.py
examples/sqla-filter-selectable/__init__.py
+0
-0
app.py
examples/sqla-filter-selectable/app.py
+0
-88
requirement.txt
examples/sqla-filter-selectable/requirement.txt
+0
-3
app.py
examples/sqla/app.py
+40
-1
No files found.
examples/sqla-filter-selectable/README.rst
deleted
100644 → 0
View file @
204b05c1
SQLA backend example showing how to filter select dropdown options in forms.
To run this example:
1. Clone the repository::
git clone https://github.com/flask-admin/flask-admin.git
cd flask-admin
2. Create and activate a virtual environment::
virtualenv env
source env/bin/activate
3. Install requirements::
pip install -r 'examples/sqla-filter-selectable/requirements.txt'
4. Run the application::
python examples/sqla-filter-selectable/app.py
examples/sqla-filter-selectable/__init__.py
deleted
100644 → 0
View file @
204b05c1
examples/sqla-filter-selectable/app.py
deleted
100644 → 0
View file @
204b05c1
from
flask
import
Flask
from
flask_sqlalchemy
import
SQLAlchemy
import
flask_admin
as
admin
from
flask_admin.contrib
import
sqla
# Create application
app
=
Flask
(
__name__
)
# Create dummy secrey key so we can use sessions
app
.
config
[
'SECRET_KEY'
]
=
'123456790'
# Create in-memory database
app
.
config
[
'SQLALCHEMY_DATABASE_URI'
]
=
'sqlite:///sample_db_3.sqlite'
app
.
config
[
'SQLALCHEMY_ECHO'
]
=
True
db
=
SQLAlchemy
(
app
)
# Flask views
@
app
.
route
(
'/'
)
def
index
():
return
'<a href="/admin/">Click me to get to Admin!</a>'
class
Person
(
db
.
Model
):
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
name
=
db
.
Column
(
db
.
String
(
50
))
pets
=
db
.
relationship
(
'Pet'
,
backref
=
'person'
)
def
__unicode__
(
self
):
return
self
.
name
class
Pet
(
db
.
Model
):
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
name
=
db
.
Column
(
db
.
String
(
50
))
person_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
'person.id'
))
available
=
db
.
Column
(
db
.
Boolean
)
def
__unicode__
(
self
):
return
self
.
name
class
PersonAdmin
(
sqla
.
ModelView
):
""" Override ModelView to filter options available in forms. """
def
create_form
(
self
):
return
self
.
_use_filtered_parent
(
super
(
PersonAdmin
,
self
)
.
create_form
()
)
def
edit_form
(
self
,
obj
):
return
self
.
_use_filtered_parent
(
super
(
PersonAdmin
,
self
)
.
edit_form
(
obj
)
)
def
_use_filtered_parent
(
self
,
form
):
form
.
pets
.
query_factory
=
self
.
_get_parent_list
return
form
def
_get_parent_list
(
self
):
# only show available pets in the form
return
Pet
.
query
.
filter_by
(
available
=
True
)
.
all
()
def
__unicode__
(
self
):
return
self
.
name
# Create admin
admin
=
admin
.
Admin
(
app
,
name
=
'Example: SQLAlchemy - Filtered Form Selectable'
,
template_mode
=
'bootstrap3'
)
admin
.
add_view
(
PersonAdmin
(
Person
,
db
.
session
))
admin
.
add_view
(
sqla
.
ModelView
(
Pet
,
db
.
session
))
if
__name__
==
'__main__'
:
# Recreate DB
db
.
drop_all
()
db
.
create_all
()
person
=
Person
(
name
=
'Bill'
)
pet1
=
Pet
(
name
=
'Dog'
,
available
=
True
)
pet2
=
Pet
(
name
=
'Fish'
,
available
=
True
)
pet3
=
Pet
(
name
=
'Ocelot'
,
available
=
False
)
db
.
session
.
add_all
([
person
,
pet1
,
pet2
,
pet3
])
db
.
session
.
commit
()
# Start app
app
.
run
(
debug
=
True
)
examples/sqla-filter-selectable/requirement.txt
deleted
100644 → 0
View file @
204b05c1
Flask
Flask-Admin
Flask-SQLAlchemy
examples/sqla/app.py
View file @
aeeb83c7
...
...
@@ -38,11 +38,22 @@ class User(db.Model):
first_name
=
db
.
Column
(
db
.
String
(
100
))
last_name
=
db
.
Column
(
db
.
String
(
100
))
email
=
db
.
Column
(
db
.
String
(
120
),
unique
=
True
)
pets
=
db
.
relationship
(
'Pet'
,
backref
=
'owner'
)
def
__str__
(
self
):
return
"{}, {}"
.
format
(
self
.
last_name
,
self
.
first_name
)
class
Pet
(
db
.
Model
):
id
=
db
.
Column
(
db
.
Integer
,
primary_key
=
True
)
name
=
db
.
Column
(
db
.
String
(
50
),
nullable
=
False
)
person_id
=
db
.
Column
(
db
.
Integer
,
db
.
ForeignKey
(
'user.id'
))
available
=
db
.
Column
(
db
.
Boolean
)
def
__str__
(
self
):
return
self
.
name
# Create M2M table
post_tags_table
=
db
.
Table
(
'post_tags'
,
db
.
Model
.
metadata
,
db
.
Column
(
'post_id'
,
db
.
Integer
,
db
.
ForeignKey
(
'post.id'
)),
...
...
@@ -140,9 +151,11 @@ class UserAdmin(sqla.ModelView):
'last_name'
,
'first_name'
,
'email'
,
'pets'
,
]
column_default_sort
=
[(
'last_name'
,
False
),
(
'first_name'
,
False
)]
# sort on multiple columns
# each filter in the list is a filter operation (equals, not equals, etc)
# custom filter: each filter in the list is a filter operation (equals, not equals, etc)
# filters with the same name will appear as operations under the same filter
column_filters
=
[
FilterEqual
(
column
=
User
.
last_name
,
name
=
'Last Name'
),
...
...
@@ -151,6 +164,25 @@ class UserAdmin(sqla.ModelView):
]
inline_models
=
[(
UserInfo
,
inline_form_options
),
]
# setup create & edit forms so that only 'available' pets can be selected
def
create_form
(
self
):
return
self
.
_use_filtered_parent
(
super
(
UserAdmin
,
self
)
.
create_form
()
)
def
edit_form
(
self
,
obj
):
return
self
.
_use_filtered_parent
(
super
(
UserAdmin
,
self
)
.
edit_form
(
obj
)
)
def
_use_filtered_parent
(
self
,
form
):
form
.
pets
.
query_factory
=
self
.
_get_parent_list
return
form
def
_get_parent_list
(
self
):
# only show available pets in the form
return
Pet
.
query
.
filter_by
(
available
=
True
)
.
all
()
# Customized Post model admin
...
...
@@ -219,6 +251,7 @@ admin = admin.Admin(app, name='Example: SQLAlchemy', template_mode='bootstrap3')
admin
.
add_view
(
UserAdmin
(
User
,
db
.
session
))
admin
.
add_view
(
sqla
.
ModelView
(
Tag
,
db
.
session
))
admin
.
add_view
(
PostAdmin
(
db
.
session
))
admin
.
add_view
(
sqla
.
ModelView
(
Pet
,
db
.
session
,
category
=
"Other"
))
admin
.
add_view
(
sqla
.
ModelView
(
UserInfo
,
db
.
session
,
category
=
"Other"
))
admin
.
add_view
(
TreeView
(
Tree
,
db
.
session
,
category
=
"Other"
))
admin
.
add_view
(
ScreenView
(
Screen
,
db
.
session
,
category
=
"Other"
))
...
...
@@ -333,6 +366,12 @@ def build_sample_db():
leaf
.
parent
=
branch
db
.
session
.
add
(
leaf
)
db
.
session
.
add
(
Pet
(
name
=
'Dog'
,
available
=
True
))
db
.
session
.
add
(
Pet
(
name
=
'Fish'
,
available
=
True
))
db
.
session
.
add
(
Pet
(
name
=
'Cat'
,
available
=
True
))
db
.
session
.
add
(
Pet
(
name
=
'Parrot'
,
available
=
True
))
db
.
session
.
add
(
Pet
(
name
=
'Ocelot'
,
available
=
False
))
db
.
session
.
add
(
Screen
(
width
=
500
,
height
=
2000
))
db
.
session
.
add
(
Screen
(
width
=
550
,
height
=
1900
))
...
...
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