Commit 8679ea33 authored by Serge S. Koval's avatar Serge S. Koval

Filters for remote columns will work through explicitly specified foreign key.

parent 6a9f6312
...@@ -62,7 +62,7 @@ class PostAdmin(sqlamodel.ModelView): ...@@ -62,7 +62,7 @@ class PostAdmin(sqlamodel.ModelView):
searchable_columns = ('title', User.username) searchable_columns = ('title', User.username)
column_filters = (User, column_filters = ('user',
'title', 'title',
'date', 'date',
filters.FilterLike(Post.title, 'Fixed Title', options=(('test1', 'Test 1'), ('test2', 'Test 2')))) filters.FilterLike(Post.title, 'Fixed Title', options=(('test1', 'Test 1'), ('test2', 'Test 2'))))
......
from sqlalchemy.orm.attributes import InstrumentedAttribute from sqlalchemy.orm.attributes import InstrumentedAttribute
from sqlalchemy.orm import subqueryload from sqlalchemy.orm import subqueryload
from sqlalchemy.sql.expression import desc from sqlalchemy.sql.expression import desc
...@@ -280,10 +281,10 @@ class ModelView(BaseModelView): ...@@ -280,10 +281,10 @@ class ModelView(BaseModelView):
if attr is None: if attr is None:
raise Exception('Failed to find field for filter: %s' % name) raise Exception('Failed to find field for filter: %s' % name)
if hasattr(attr, '_sa_class_manager'): if hasattr(attr, 'property') and hasattr(attr.property, 'direction'):
filters = [] filters = []
for p in self._get_model_iterator(attr): for p in self._get_model_iterator(attr.property.mapper.class_):
if hasattr(p, 'columns'): if hasattr(p, 'columns'):
# TODO: Check for multiple columns # TODO: Check for multiple columns
column = p.columns[0] column = p.columns[0]
...@@ -291,7 +292,7 @@ class ModelView(BaseModelView): ...@@ -291,7 +292,7 @@ class ModelView(BaseModelView):
if column.foreign_keys or column.primary_key: if column.foreign_keys or column.primary_key:
continue continue
visible_name = '%s / %s' % (self.get_column_name(attr.__table__.name), visible_name = '%s / %s' % (self.get_column_name(attr.prop.table.name),
self.get_column_name(p.key)) self.get_column_name(p.key))
type_name = type(column.type).__name__ type_name = type(column.type).__name__
......
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