improve Crud view

This commit is contained in:
Lance Edgar 2012-08-15 09:31:57 -07:00
parent 7805018f13
commit 30991b5076

View file

@ -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()