widgets: make table widget handle loading back incomplete data (#17061) #960

Merged
fpeters merged 1 commits from wip/17061-table-change into main 2024-01-12 15:11:33 +01:00
2 changed files with 21 additions and 1 deletions

View File

@ -238,6 +238,20 @@ def test_table_widget():
mock_form_submission(req, widget, {'test$c-0-0': 'X', 'test$c-0-1': 'Y'})
assert widget.parse() == [['X', 'Y', None], ['1', None, None]]
# load back incomplete data
widget = TableWidget(
'test', columns=['a', 'b', 'c'], rows=['A', 'B'], value=[['a'], ['b']], readonly=True
)
form = MockHtmlForm(widget)
assert [x.attrib.get('value') for x in PyQuery(form.as_html).find('td input')] == [
'a',
None,
None,
'b',
None,
None,
]
def test_passwordentry_widget_success():
widget = PasswordEntryWidget('test')

View File

@ -2728,7 +2728,13 @@ class TableWidget(CompositeWidget):
widget = self.add_widget(kwargs, i, j)
widget = self.get_widget('c-%s-%s' % (i, j))
if value and self.readonly:
widget.set_value(value[i][j])
try:
widget.set_value(value[i][j])
except IndexError:
# somehow the value didn't have the given cell, this is probably
# because the field rows/columns have changed since the data was
# saved, ignore.
pass
widget.transfer_form_value(get_request())
def add_widget(self, kwargs, i, j):