diff --git a/pyramid_formalchemy/__init__.py b/pyramid_formalchemy/__init__.py index 58efe68..dfb1eb6 100644 --- a/pyramid_formalchemy/__init__.py +++ b/pyramid_formalchemy/__init__.py @@ -120,6 +120,7 @@ def formalchemy_admin(config, route_name, request_method='GET', permission='new', **kw) + config.add_view(context='pyramid_formalchemy.resources.ModelListing', renderer='pyramid_formalchemy:templates/admin/new.pt', attr='create', @@ -134,6 +135,7 @@ def formalchemy_admin(config, route_name, request_method='GET', permission='edit', **kw) + config.add_view(context='pyramid_formalchemy.resources.Model', renderer='pyramid_formalchemy:templates/admin/edit.pt', name='edit', @@ -141,6 +143,7 @@ def formalchemy_admin(config, route_name, request_method='POST', permission='edit', **kw) + config.add_view(context='pyramid_formalchemy.resources.Model', renderer='json', name='', @@ -156,6 +159,7 @@ def formalchemy_admin(config, route_name, request_method='POST', permission='delete', **kw) + config.add_view(context='pyramid_formalchemy.resources.Model', renderer='pyramid_formalchemy:templates/admin/edit.pt', attr='delete', @@ -171,3 +175,10 @@ def formalchemy_admin(config, route_name, attr='show', **kw) + config.add_view(context='pyramid_formalchemy.resources.ModelListing', + attr='autocomplete', + name='autocomplete', + request_method='GET', + permission='view', + **kw) + diff --git a/pyramid_formalchemy/views.py b/pyramid_formalchemy/views.py index 623970d..48e9e0f 100644 --- a/pyramid_formalchemy/views.py +++ b/pyramid_formalchemy/views.py @@ -390,3 +390,12 @@ class ModelView(object): return exc.HTTPFound(location=request.fa_url(request.model_name)) return self.render(id=request.model_id) + def autocomplete(self, *args, **kwargs): + filter_term = "%s%%" % self.request.params.get('term') + filter_attr = getattr(self.request.model_class, self.request.params.get('filter_by')) + query = self.session.query(self.request.model_class.id, filter_attr).filter(filter_attr.ilike(filter_term)) + items = self.request.query_factory(self.request, query) + return Response(json.dumps([{'label' : x[1], + 'value' : x[0]} for x in items ]), + content_type='text/plain') +