fix: skip custom rendering for missing grid columns
This commit is contained in:
parent
19cf6cf03a
commit
ceec4714fa
2 changed files with 35 additions and 11 deletions
|
|
@ -2515,8 +2515,10 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
||||||
|
|
||||||
# customize value rendering where applicable
|
# customize value rendering where applicable
|
||||||
for key, renderer in self.renderers.items():
|
for key, renderer in self.renderers.items():
|
||||||
value = record.get(key, None)
|
# nb. no need to render if column not included
|
||||||
record[key] = renderer(original_record, key, value)
|
if key in self.columns:
|
||||||
|
value = record.get(key, None)
|
||||||
|
record[key] = renderer(original_record, key, value)
|
||||||
|
|
||||||
# add action urls to each record
|
# add action urls to each record
|
||||||
for action in self.actions:
|
for action in self.actions:
|
||||||
|
|
|
||||||
|
|
@ -1985,11 +1985,13 @@ class TestGrid(WebTestCase):
|
||||||
|
|
||||||
# typical data is a list
|
# typical data is a list
|
||||||
mydata = [
|
mydata = [
|
||||||
{"foo": "bar"},
|
{"foo": "bar", "baz": "zoo"},
|
||||||
]
|
]
|
||||||
grid = self.make_grid(columns=["foo"], data=mydata)
|
grid = self.make_grid(columns=["foo", "baz"], data=mydata)
|
||||||
context = grid.get_vue_context()
|
context = grid.get_vue_context()
|
||||||
self.assertEqual(context, {"data": [{"foo": "bar"}], "row_classes": {}})
|
self.assertEqual(
|
||||||
|
context, {"data": [{"foo": "bar", "baz": "zoo"}], "row_classes": {}}
|
||||||
|
)
|
||||||
|
|
||||||
# non-declared columns are discarded
|
# non-declared columns are discarded
|
||||||
mydata = [
|
mydata = [
|
||||||
|
|
@ -2001,27 +2003,47 @@ class TestGrid(WebTestCase):
|
||||||
|
|
||||||
# if grid has actions, that list may be supplemented
|
# if grid has actions, that list may be supplemented
|
||||||
mydata = [
|
mydata = [
|
||||||
{"foo": "bar"},
|
{"foo": "bar", "baz": "zoo"},
|
||||||
]
|
]
|
||||||
grid = self.make_grid(columns=["foo"], data=mydata)
|
grid = self.make_grid(columns=["foo", "baz"], data=mydata)
|
||||||
grid.actions.append(mod.GridAction(self.request, "view", url="/blarg"))
|
grid.actions.append(mod.GridAction(self.request, "view", url="/blarg"))
|
||||||
context = grid.get_vue_context()
|
context = grid.get_vue_context()
|
||||||
self.assertIsNot(context["data"], mydata)
|
self.assertIsNot(context["data"], mydata)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
context,
|
context,
|
||||||
{"data": [{"foo": "bar", "_action_url_view": "/blarg"}], "row_classes": {}},
|
{
|
||||||
|
"data": [{"foo": "bar", "baz": "zoo", "_action_url_view": "/blarg"}],
|
||||||
|
"row_classes": {},
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
# can override value rendering
|
# can override value rendering
|
||||||
grid.set_renderer("foo", lambda record, key, value: "blah blah")
|
renderer = MagicMock(return_value="blah blah")
|
||||||
|
grid.set_renderer("foo", renderer)
|
||||||
context = grid.get_vue_context()
|
context = grid.get_vue_context()
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
context,
|
context,
|
||||||
{
|
{
|
||||||
"data": [{"foo": "blah blah", "_action_url_view": "/blarg"}],
|
"data": [
|
||||||
|
{"foo": "blah blah", "baz": "zoo", "_action_url_view": "/blarg"}
|
||||||
|
],
|
||||||
"row_classes": {},
|
"row_classes": {},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
renderer.assert_called_once_with({"foo": "bar", "baz": "zoo"}, "foo", "bar")
|
||||||
|
|
||||||
|
# custom rendering skipped if column not included
|
||||||
|
grid.remove("foo")
|
||||||
|
renderer.reset_mock()
|
||||||
|
context = grid.get_vue_context()
|
||||||
|
self.assertEqual(
|
||||||
|
context,
|
||||||
|
{
|
||||||
|
"data": [{"baz": "zoo", "_action_url_view": "/blarg"}],
|
||||||
|
"row_classes": {},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
renderer.assert_not_called()
|
||||||
|
|
||||||
# can set row class
|
# can set row class
|
||||||
grid.row_class = "whatever"
|
grid.row_class = "whatever"
|
||||||
|
|
@ -2029,7 +2051,7 @@ class TestGrid(WebTestCase):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
context,
|
context,
|
||||||
{
|
{
|
||||||
"data": [{"foo": "blah blah", "_action_url_view": "/blarg"}],
|
"data": [{"baz": "zoo", "_action_url_view": "/blarg"}],
|
||||||
"row_classes": {"0": "whatever"},
|
"row_classes": {"0": "whatever"},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue