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
95ee8ebb
Commit
95ee8ebb
authored
Sep 19, 2012
by
Serge S. Koval
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #64 from baverman/master
on_model_change and on_model_delete hooks
parents
7d483ccb
6695cdfc
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
67 additions
and
0 deletions
+67
-0
view.py
flask_admin/contrib/peeweemodel/view.py
+5
-0
view.py
flask_admin/contrib/sqlamodel/view.py
+6
-0
base.py
flask_admin/model/base.py
+22
-0
test_sqlamodel.py
flask_admin/tests/test_sqlamodel.py
+34
-0
No files found.
flask_admin/contrib/peeweemodel/view.py
View file @
95ee8ebb
...
...
@@ -282,6 +282,8 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved
save_inline
(
form
,
model
)
self
.
on_model_change
(
form
,
model
)
return
True
except
Exception
,
ex
:
flash
(
gettext
(
'Failed to create model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
...
...
@@ -295,6 +297,8 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved
save_inline
(
form
,
model
)
self
.
on_model_change
(
form
,
model
)
return
True
except
Exception
,
ex
:
flash
(
gettext
(
'Failed to update model.
%(error)
s'
,
error
=
str
(
ex
)),
'error'
)
...
...
@@ -302,6 +306,7 @@ class ModelView(BaseModelView):
def
delete_model
(
self
,
model
):
try
:
self
.
on_model_delete
(
model
)
model
.
delete_instance
(
recursive
=
True
)
return
True
except
Exception
,
ex
:
...
...
flask_admin/contrib/sqlamodel/view.py
View file @
95ee8ebb
...
...
@@ -567,6 +567,8 @@ class ModelView(BaseModelView):
model
=
self
.
model
()
form
.
populate_obj
(
model
)
self
.
session
.
add
(
model
)
self
.
session
.
flush
()
self
.
on_model_change
(
form
,
model
)
self
.
session
.
commit
()
return
True
except
Exception
,
ex
:
...
...
@@ -584,6 +586,8 @@ class ModelView(BaseModelView):
"""
try
:
form
.
populate_obj
(
model
)
self
.
session
.
flush
()
self
.
on_model_change
(
form
,
model
)
self
.
session
.
commit
()
return
True
except
Exception
,
ex
:
...
...
@@ -598,6 +602,8 @@ class ModelView(BaseModelView):
Model to delete
"""
try
:
self
.
on_model_delete
(
model
)
self
.
session
.
flush
()
self
.
session
.
delete
(
model
)
self
.
session
.
commit
()
return
True
...
...
flask_admin/model/base.py
View file @
95ee8ebb
...
...
@@ -531,6 +531,28 @@ class BaseModelView(BaseView, ActionsMixin):
raise
NotImplemented
(
'Please implement get_one method'
)
# Model handlers
def
on_model_change
(
self
,
form
,
model
):
"""
Allow to do some actions after a model was created or updated.
Called from create_model and update_model in the same transaction
(if it has any meaning for a store backend).
By default do nothing.
"""
pass
def
on_model_delete
(
self
,
model
):
"""
Allow to do some actions before a model will be deleted.
Called from delete_model in the same transaction
(if it has any meaning for a store backend).
By default do nothing.
"""
pass
def
create_model
(
self
,
form
):
"""
Create model from the form.
...
...
flask_admin/tests/test_sqlamodel.py
View file @
95ee8ebb
...
...
@@ -358,3 +358,37 @@ def test_form_override():
def
test_relations
():
# TODO: test relations
pass
def
test_on_model_change_delete
():
app
,
db
,
admin
=
setup
()
Model1
,
_
=
create_models
(
db
)
db
.
create_all
()
class
ModelView
(
CustomModelView
):
def
on_model_change
(
self
,
form
,
model
):
model
.
test1
=
model
.
test1
.
upper
()
def
on_model_delete
(
self
,
model
):
self
.
deleted
=
True
view
=
ModelView
(
Model1
,
db
.
session
)
admin
.
add_view
(
view
)
client
=
app
.
test_client
()
client
.
post
(
'/admin/model1view/new/'
,
data
=
dict
(
test1
=
'test1large'
,
test2
=
'test2'
))
model
=
db
.
session
.
query
(
Model1
)
.
first
()
eq_
(
model
.
test1
,
'TEST1LARGE'
)
url
=
'/admin/model1view/edit/?id=
%
s'
%
model
.
id
client
.
post
(
url
,
data
=
dict
(
test1
=
'test1small'
,
test2
=
'test2large'
))
model
=
db
.
session
.
query
(
Model1
)
.
first
()
eq_
(
model
.
test1
,
'TEST1SMALL'
)
url
=
'/admin/model1view/delete/?id=
%
s'
%
model
.
id
client
.
post
(
url
)
ok_
(
view
.
deleted
)
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