From 3c063e7d7b5739cecbf2209481f19b2f8a0987df Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Wed, 18 Mar 2026 20:29:26 -0500 Subject: [PATCH] fix: ensure `uuid` column is preserved for grid data i.e. even if it's not explicitly requested; this is for sake of checkboxes --- src/wuttaweb/grids/base.py | 8 ++++++-- tests/grids/test_base.py | 21 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/wuttaweb/grids/base.py b/src/wuttaweb/grids/base.py index e2a9f83..0b49833 100644 --- a/src/wuttaweb/grids/base.py +++ b/src/wuttaweb/grids/base.py @@ -2506,8 +2506,12 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth # convert record to new dict record = self.object_to_dict(original_record) - # discard non-declared fields - record = {field: record[field] for field in record if field in self.columns} + # discard non-declared fields (but always keep uuid) + record = { + field: record[field] + for field in record + if field in self.columns or field == "uuid" + } # make all values safe for json record = make_json_safe(record, warn=False) diff --git a/tests/grids/test_base.py b/tests/grids/test_base.py index 2978364..8acb43a 100644 --- a/tests/grids/test_base.py +++ b/tests/grids/test_base.py @@ -1993,7 +1993,7 @@ class TestGrid(WebTestCase): context, {"data": [{"foo": "bar", "baz": "zoo"}], "row_classes": {}} ) - # non-declared columns are discarded + # non-declared columns are discarded... mydata = [ {"foo": "a", "bar": "b", "baz": "c"}, ] @@ -2001,6 +2001,25 @@ class TestGrid(WebTestCase): context = grid.get_vue_context() self.assertEqual(context, {"data": [{"bar": "b"}], "row_classes": {}}) + # ...but uuid column is never discarded + mydata = [ + { + "foo": "a", + "bar": "b", + "baz": "c", + "uuid": "069bb511-39d3-7c74-8000-38668fdef9ec", + }, + ] + grid = self.make_grid(columns=["bar"], data=mydata) + context = grid.get_vue_context() + self.assertEqual( + context, + { + "data": [{"bar": "b", "uuid": "069bb511-39d3-7c74-8000-38668fdef9ec"}], + "row_classes": {}, + }, + ) + # if grid has actions, that list may be supplemented mydata = [ {"foo": "bar", "baz": "zoo"},