Add speed bump / confirmation page when deleting records.
Also cleanup the context menu links on various master CRUD pages.
This commit is contained in:
parent
94406f84b3
commit
640bb736b2
4 changed files with 84 additions and 20 deletions
|
@ -33,7 +33,7 @@ from edbob.util import prettify
|
|||
|
||||
import formalchemy
|
||||
from pyramid.renderers import get_renderer, render_to_response
|
||||
from pyramid.httpexceptions import HTTPFound, HTTPNotFound
|
||||
from pyramid.httpexceptions import HTTPException, HTTPFound, HTTPNotFound
|
||||
|
||||
from tailbone import forms
|
||||
from tailbone.views import View
|
||||
|
@ -148,16 +148,28 @@ class MasterView(View):
|
|||
self.deleting = True
|
||||
instance = self.get_instance()
|
||||
|
||||
# Let derived classes prep for (or cancel) deletion.
|
||||
result = self.before_delete(instance)
|
||||
if result is not None:
|
||||
return result
|
||||
if not self.deletable_instance(instance):
|
||||
self.request.session.flash("Deletion is not permitted for {} {}".format(
|
||||
self.get_model_title(), instance))
|
||||
return HTTPFound(location=self.get_action_url('view', instance))
|
||||
|
||||
self.delete_instance(instance)
|
||||
self.request.session.flash("{0} {1} has been deleted.".format(
|
||||
self.get_model_title(), instance))
|
||||
return self.redirect(self.get_after_delete_url(instance))
|
||||
form = self.make_form(instance)
|
||||
|
||||
# TODO: Add better validation, ideally CSRF etc.
|
||||
if self.request.method == 'POST':
|
||||
|
||||
# Let derived classes prep for (or cancel) deletion.
|
||||
result = self.before_delete(instance)
|
||||
if isinstance(result, HTTPException):
|
||||
return result
|
||||
|
||||
self.delete_instance(instance)
|
||||
self.request.session.flash("{} {} has been deleted.".format(
|
||||
self.get_model_title(), instance))
|
||||
return self.redirect(self.get_after_delete_url(instance))
|
||||
|
||||
form.readonly = True
|
||||
return self.render_to_response('delete', {'instance': instance, 'form': form})
|
||||
|
||||
##############################
|
||||
# Core Stuff
|
||||
|
@ -379,9 +391,14 @@ class MasterView(View):
|
|||
if self.editable:
|
||||
actions.append(self.make_action('edit', icon='pencil'))
|
||||
if self.deletable:
|
||||
actions.append(self.make_action('delete', icon='trash'))
|
||||
actions.append(self.make_action('delete', icon='trash', url=self.default_delete_url))
|
||||
return actions
|
||||
|
||||
def default_delete_url(self, row):
|
||||
if self.deletable_instance(row):
|
||||
return self.request.route_url('{}.delete'.format(self.get_route_prefix()),
|
||||
**self.get_action_route_kwargs(row))
|
||||
|
||||
def make_action(self, key, **kwargs):
|
||||
"""
|
||||
Make a new :class:`GridAction` instance for the current grid.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue