forms: remove extraneous empty table rows (#11045)
This commit is contained in:
parent
3438972bac
commit
53420efd4b
|
@ -841,6 +841,42 @@ def test_form_multi_page_post_conditions(pub):
|
|||
resp = resp.forms[0].submit('submit')
|
||||
assert 'Check values then click submit.' in resp.body
|
||||
|
||||
def test_form_multi_page_table_with_rows(pub):
|
||||
formdef = create_formdef()
|
||||
formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
|
||||
fields.PageField(id='2', label='2nd page', type='page'),
|
||||
fields.TableRowsField(id='1', label='table', columns=['a', 'b'])
|
||||
]
|
||||
formdef.store()
|
||||
page = get_app(pub).get('/test/')
|
||||
formdef.data_class().wipe()
|
||||
page = page.form.submit('submit')
|
||||
page.form['f1$element0$col0'] = 'bar1'
|
||||
page.form['f1$element1$col0'] = 'bar2'
|
||||
page.form['f1$element2$col0'] = 'bar3'
|
||||
page.form['f1$element3$col0'] = 'bar4'
|
||||
page.form['f1$element4$col0'] = 'bar5'
|
||||
page = page.form.submit('f1$add_element')
|
||||
assert not 'Check values then click submit.' in page.body
|
||||
page.form['f1$element5$col0'] = 'bar6'
|
||||
page = page.form.submit('f1$add_element')
|
||||
assert not 'Check values then click submit.' in page.body
|
||||
page.form['f1$element6$col0'] = 'bar7'
|
||||
page = page.form.submit('submit')
|
||||
assert 'Check values then click submit.' in page.body
|
||||
page = page.forms[0].submit('previous')
|
||||
page = page.forms[0].submit('submit')
|
||||
assert 'Check values then click submit.' in page.body
|
||||
assert not 'f1$element7$col0' in page.body
|
||||
page = page.forms[0].submit('submit')
|
||||
assert page.status_int == 302
|
||||
page = page.follow()
|
||||
assert 'The form has been recorded' in page.body
|
||||
assert formdef.data_class().count() == 1
|
||||
data_id = formdef.data_class().select()[0].id
|
||||
data = formdef.data_class().get(data_id)
|
||||
assert data.data == {'1': [['bar%s' % x, ''] for x in range(1, 8)]}
|
||||
|
||||
def test_form_submit_with_user(pub, emails):
|
||||
create_user(pub)
|
||||
formdef = create_formdef()
|
||||
|
|
|
@ -1604,6 +1604,18 @@ class TableListRowsWidget(WidgetListAsTable):
|
|||
|
||||
self.set_value(value)
|
||||
|
||||
# WidgetList.__init__ added as many extra rows as what there is in
|
||||
# name$added_elements, but this is on top of the existing rows,
|
||||
# making it quite an unnecessary number of empty rows.
|
||||
# fixup this so that we don't have more than one empty row.
|
||||
if value:
|
||||
for i, element_name in enumerate(self.element_names[:]):
|
||||
if i < len(value):
|
||||
continue
|
||||
self.element_names.remove(element_name)
|
||||
self.widgets.remove(self.get_widget(element_name))
|
||||
del self._names[element_name]
|
||||
|
||||
def parse(self, request=None):
|
||||
WidgetListAsTable.parse(self, request=request)
|
||||
if request is None:
|
||||
|
|
Loading…
Reference in New Issue