Commit 387b5f84 authored by PJ Janse van Rensburg's avatar PJ Janse van Rensburg

Merge branch 'sqla-ajax-loader-filter' of git://github.com/dzhou/flask-admin into prs-to-merge

parents 3ddaaeaf ac38f670
from sqlalchemy import or_
from sqlalchemy import or_, and_
from flask_admin._compat import as_unicode, string_types
from flask_admin.model.ajax import AjaxModelLoader, DEFAULT_PAGE_SIZE
......@@ -13,6 +13,8 @@ class QueryAjaxModelLoader(AjaxModelLoader):
:param fields:
Fields to run query against
:param filters:
Additional filters to apply to the loader
"""
super(QueryAjaxModelLoader, self).__init__(name, options)
......@@ -20,6 +22,7 @@ class QueryAjaxModelLoader(AjaxModelLoader):
self.model = model
self.fields = options.get('fields')
self.order_by = options.get('order_by')
self.filters = options.get('filters')
if not self.fields:
raise ValueError('AJAX loading requires `fields` to be specified for %s.%s' % (model, self.name))
......@@ -65,6 +68,10 @@ class QueryAjaxModelLoader(AjaxModelLoader):
filters = (field.ilike(u'%%%s%%' % term) for field in self._cached_fields)
query = query.filter(or_(*filters))
if self.filters:
filters = ["%s.%s" % (self.model.__name__.lower(), value) for value in self.filters]
query = query.filter(and_(*filters))
if self.order_by:
query = query.order_by(self.order_by)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment