improve Crud view
This commit is contained in:
parent
7805018f13
commit
30991b5076
1 changed files with 41 additions and 13 deletions
|
@ -28,8 +28,8 @@
|
|||
|
||||
from pyramid.httpexceptions import HTTPFound
|
||||
|
||||
from edbob.pyramid import forms
|
||||
from edbob.pyramid import Session
|
||||
from edbob.pyramid.forms.formalchemy.fieldset import FieldSet
|
||||
from edbob.util import requires_impl
|
||||
|
||||
|
||||
|
@ -50,6 +50,10 @@ class Crud(object):
|
|||
def mapped_class(self):
|
||||
pass
|
||||
|
||||
@property
|
||||
def crud_title(self):
|
||||
return self.mapped_class.__name__
|
||||
|
||||
@property
|
||||
@requires_impl(is_property=True)
|
||||
def home_route(self):
|
||||
|
@ -68,7 +72,12 @@ class Crud(object):
|
|||
kwargs['action_url'] = self.request.current_route_url()
|
||||
if 'home_url' not in kwargs:
|
||||
kwargs['home_url'] = self.home_url
|
||||
return forms.make_fieldset(model, **kwargs)
|
||||
|
||||
kwargs.setdefault('session', Session())
|
||||
fs = FieldSet(model, **kwargs)
|
||||
fs.create = model is self.mapped_class
|
||||
fs.update = not fs.create
|
||||
return fs
|
||||
|
||||
def fieldset(self, obj):
|
||||
return self.make_fieldset(obj)
|
||||
|
@ -88,20 +97,21 @@ class Crud(object):
|
|||
fs.rebind(data=self.request.params)
|
||||
if fs.validate():
|
||||
|
||||
result = None
|
||||
|
||||
fs.sync()
|
||||
result = self.post_sync(fs)
|
||||
if not result:
|
||||
Session.add(fs.model)
|
||||
Session.flush()
|
||||
self.request.session.flash('%s "%s" has been %s.' % (
|
||||
fs.crud_title, fs.get_display_text(),
|
||||
'updated' if fs.edit else 'created'))
|
||||
Session.add(fs.model)
|
||||
Session.flush()
|
||||
|
||||
result = self.post_sync(fs)
|
||||
if result:
|
||||
return result
|
||||
|
||||
# Session.add(fs.model)
|
||||
# Session.flush()
|
||||
if fs.create:
|
||||
self.flash_create(fs.model)
|
||||
else:
|
||||
self.flash_update(fs.model)
|
||||
|
||||
if self.request.params.get('add-another') == '1':
|
||||
return HTTPFound(location=self.request.current_route_url())
|
||||
|
||||
|
@ -133,11 +143,29 @@ class Crud(object):
|
|||
uuid = self.request.matchdict['uuid']
|
||||
model = Session.query(self.mapped_class).get(uuid) if uuid else None
|
||||
assert model
|
||||
result = self.pre_delete(model)
|
||||
if result:
|
||||
return result
|
||||
Session.delete(model)
|
||||
self.request.session.flash("The %s has been deleted." %
|
||||
self.mapped_class.__name__)
|
||||
Session.flush() # Don't set flash message if delete fails.
|
||||
self.flash_delete(model)
|
||||
return HTTPFound(location=self.home_url)
|
||||
|
||||
def flash_create(self, model):
|
||||
self.request.session.flash("%s \"%s\" has been created." %
|
||||
(self.crud_title, model))
|
||||
|
||||
def flash_delete(self, model):
|
||||
self.request.session.flash("%s \"%s\" has been deleted." %
|
||||
(self.crud_title, model))
|
||||
|
||||
def flash_update(self, model):
|
||||
self.request.session.flash("%s \"%s\" has been updated." %
|
||||
(self.crud_title, model))
|
||||
|
||||
def pre_delete(self, model):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def add_routes(cls, config):
|
||||
route_name_prefix = cls.route_prefix or cls.mapped_class.__name__.lower()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue