3
0
Fork 0

fix: add support for rendering association proxy values in grid

This commit is contained in:
Lance Edgar 2026-02-15 14:24:04 -06:00
parent 4307b5a9eb
commit e1122caa9c
2 changed files with 23 additions and 0 deletions

View file

@ -2415,6 +2415,15 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
except TypeError: except TypeError:
dct = dict(obj.__dict__) dct = dict(obj.__dict__)
dct.pop("_sa_instance_state", None) dct.pop("_sa_instance_state", None)
# nb. inject association proxy(-like) fields if applicable
for field in self.columns:
if field not in dct:
try:
dct[field] = getattr(obj, field)
except AttributeError:
pass
return dct return dct
def get_vue_context(self): def get_vue_context(self):

View file

@ -1923,10 +1923,24 @@ class TestGrid(WebTestCase):
def __init__(self, **kw): def __init__(self, **kw):
self.__dict__.update(kw) self.__dict__.update(kw)
def __getattr__(self, name):
if name == "something":
return "else"
raise AttributeError(f"attr not found: {name}")
mock = MockSetting(**setting) mock = MockSetting(**setting)
dct = grid.object_to_dict(mock) dct = grid.object_to_dict(mock)
self.assertIsInstance(dct, dict) self.assertIsInstance(dct, dict)
self.assertEqual(dct, setting) self.assertEqual(dct, setting)
self.assertNotIn("something", dct)
# test (mock) association proxy behavior
grid.columns.append("something")
grid.columns.append("another")
dct = grid.object_to_dict(mock)
self.assertIn("something", dct)
self.assertEqual(dct["something"], "else")
self.assertNotIn("another", dct)
def test_get_vue_context(self): def test_get_vue_context(self):