Commit 591f7b46 authored by Serge S. Koval's avatar Serge S. Koval

Merge pull request #819 from silme-ea/sqla-filters-scaffold-bug

Enabled use of BaseFilter instances on SQLA model views
parents f2698add cc521944
...@@ -17,7 +17,7 @@ from flask_admin.model.fields import ListEditableFieldList ...@@ -17,7 +17,7 @@ from flask_admin.model.fields import ListEditableFieldList
from flask_admin.actions import action from flask_admin.actions import action
from flask_admin._backwards import ObsoleteAttr from flask_admin._backwards import ObsoleteAttr
from flask_admin.contrib.sqla import form, filters, tools from flask_admin.contrib.sqla import form, filters as sqla_filters, tools
from .typefmt import DEFAULT_FORMATTERS from .typefmt import DEFAULT_FORMATTERS
from .tools import get_query_for_ids from .tools import get_query_for_ids
from .ajax import create_ajax_loader from .ajax import create_ajax_loader
...@@ -154,7 +154,7 @@ class ModelView(BaseModelView): ...@@ -154,7 +154,7 @@ class ModelView(BaseModelView):
inline_model_form_converter = MyInlineModelConverter inline_model_form_converter = MyInlineModelConverter
""" """
filter_converter = filters.FilterConverter() filter_converter = sqla_filters.FilterConverter()
""" """
Field to filter converter. Field to filter converter.
...@@ -576,21 +576,12 @@ class ModelView(BaseModelView): ...@@ -576,21 +576,12 @@ class ModelView(BaseModelView):
return flt return flt
def is_valid_filter(self, filter):
"""
Verify that the provided filter object is derived from the
SQLAlchemy-compatible filter class.
:param filter:
Filter object to verify.
"""
return isinstance(filter, filters.BaseSQLAFilter)
def handle_filter(self, filter): def handle_filter(self, filter):
column = filter.column if isinstance(filter, sqla_filters.BaseSQLAFilter):
column = filter.column
if self._need_join(column.table): if self._need_join(column.table):
self._filter_joins[column.table.name] = [column.table] self._filter_joins[column.table.name] = [column.table]
return filter return filter
...@@ -810,15 +801,16 @@ class ModelView(BaseModelView): ...@@ -810,15 +801,16 @@ class ModelView(BaseModelView):
flt = self._filters[idx] flt = self._filters[idx]
# Figure out joins # Figure out joins
tbl = flt.column.table.name if isinstance(flt, sqla_filters.BaseSQLAFilter):
tbl = flt.column.table.name
join_tables = self._filter_joins.get(tbl, []) join_tables = self._filter_joins.get(tbl, [])
for table in join_tables: for table in join_tables:
if table.name not in joins: if table.name not in joins:
query = query.join(table) query = query.join(table)
count_query = count_query.join(table) count_query = count_query.join(table)
joins.add(table.name) joins.add(table.name)
# turn into python format with .clean() and apply filter # turn into python format with .clean() and apply filter
query = flt.apply(query, flt.clean(value)) query = flt.apply(query, flt.clean(value))
......
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