fix: always use prop key for default grid filters
previous logic was using underlying column name, which breaks when the prop key does not match
This commit is contained in:
parent
e5f7fe43c2
commit
ee8ca11f6a
|
@ -42,7 +42,6 @@ dependencies = [
|
|||
"pyramid_fanstatic",
|
||||
"pyramid_mako",
|
||||
"pyramid_tm",
|
||||
"SQLAlchemy-Utils",
|
||||
"waitress",
|
||||
"WebHelpers2",
|
||||
"WuttJamaican[db]>=0.19.2",
|
||||
|
|
|
@ -32,7 +32,6 @@ from collections import namedtuple, OrderedDict
|
|||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
from sqlalchemy_utils import get_columns
|
||||
|
||||
import paginate
|
||||
from paginate_sqlalchemy import SqlalchemyOrmPage
|
||||
|
@ -1147,16 +1146,29 @@ class Grid:
|
|||
filters = filters or {}
|
||||
|
||||
if self.model_class:
|
||||
# nb. i first tried self.get_model_columns() but my notes
|
||||
# say that was too aggressive in many cases. then i tried
|
||||
# using the *subset* of self.columns, just the ones which
|
||||
# corresponded to a property on the model class. and now
|
||||
# i am using sa-utils to give the "true" column list..
|
||||
for col in get_columns(self.model_class):
|
||||
if col.key in filters:
|
||||
continue
|
||||
prop = getattr(self.model_class, col.key)
|
||||
filters[prop.key] = self.make_filter(prop)
|
||||
|
||||
# nb. i have found this confusing for some reason. some
|
||||
# things i've tried so far include:
|
||||
#
|
||||
# i first tried self.get_model_columns() but my notes say
|
||||
# that was too aggressive in many cases.
|
||||
#
|
||||
# then i tried using the *subset* of self.columns, just
|
||||
# the ones which correspond to a property on the model
|
||||
# class. but sometimes that skips filters we need.
|
||||
#
|
||||
# then i tried get_columns() from sa-utils to give the
|
||||
# "true" column list, but that fails when the underlying
|
||||
# column has different name than the prop/attr key.
|
||||
#
|
||||
# so now, we are looking directly at the sa mapper, for
|
||||
# all column attrs and then using the prop key.
|
||||
|
||||
inspector = sa.inspect(self.model_class)
|
||||
for prop in inspector.column_attrs:
|
||||
if prop.key not in filters:
|
||||
attr = getattr(self.model_class, prop.key)
|
||||
filters[prop.key] = self.make_filter(attr)
|
||||
|
||||
return filters
|
||||
|
||||
|
|
Loading…
Reference in a new issue