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