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._compat import as_unicode, string_types
from flask_admin.model.ajax import AjaxModelLoader, DEFAULT_PAGE_SIZE from flask_admin.model.ajax import AjaxModelLoader, DEFAULT_PAGE_SIZE
...@@ -13,6 +13,8 @@ class QueryAjaxModelLoader(AjaxModelLoader): ...@@ -13,6 +13,8 @@ class QueryAjaxModelLoader(AjaxModelLoader):
:param fields: :param fields:
Fields to run query against Fields to run query against
:param filters:
Additional filters to apply to the loader
""" """
super(QueryAjaxModelLoader, self).__init__(name, options) super(QueryAjaxModelLoader, self).__init__(name, options)
...@@ -20,6 +22,7 @@ class QueryAjaxModelLoader(AjaxModelLoader): ...@@ -20,6 +22,7 @@ class QueryAjaxModelLoader(AjaxModelLoader):
self.model = model self.model = model
self.fields = options.get('fields') self.fields = options.get('fields')
self.order_by = options.get('order_by') self.order_by = options.get('order_by')
self.filters = options.get('filters')
if not self.fields: if not self.fields:
raise ValueError('AJAX loading requires `fields` to be specified for %s.%s' % (model, self.name)) raise ValueError('AJAX loading requires `fields` to be specified for %s.%s' % (model, self.name))
...@@ -65,6 +68,10 @@ class QueryAjaxModelLoader(AjaxModelLoader): ...@@ -65,6 +68,10 @@ class QueryAjaxModelLoader(AjaxModelLoader):
filters = (field.ilike(u'%%%s%%' % term) for field in self._cached_fields) filters = (field.ilike(u'%%%s%%' % term) for field in self._cached_fields)
query = query.filter(or_(*filters)) 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: if self.order_by:
query = query.order_by(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