widgets: make table widget handle loading back incomplete data (#17061) #960
|
@ -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')
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue