forms: don't display errors after "add row" is clicked (#43551)
This commit is contained in:
parent
520dee9e8a
commit
6381b9f5f5
|
@ -3294,6 +3294,24 @@ def test_form_table_rows_field_and_prefill(pub, emails):
|
|||
resp = get_app(pub).get('/test/')
|
||||
|
||||
|
||||
def test_form_table_rows_add_row(pub):
|
||||
formdef = create_formdef()
|
||||
formdef.fields = [
|
||||
fields.StringField(id='1', label='string', require=True),
|
||||
fields.TableRowsField(id='0', label='table', type='tablerows', columns=['a', 'b'], required=True),
|
||||
]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert resp.form['f0$added_elements'].value == '5'
|
||||
resp = resp.form.submit('f0$add_element')
|
||||
assert resp.form['f0$added_elements'].value == '6'
|
||||
assert 'There were errors processing the form' not in resp
|
||||
resp = resp.form.submit('submit')
|
||||
assert 'There were errors processing the form' in resp
|
||||
|
||||
|
||||
def test_formdata_attachment_download(pub):
|
||||
create_user(pub)
|
||||
wf = Workflow(name='status')
|
||||
|
|
|
@ -292,7 +292,7 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
'current_page_no': current_position,
|
||||
})
|
||||
|
||||
def page(self, page, page_change=True, page_error_messages=None):
|
||||
def page(self, page, page_change=True, page_error_messages=None, submit_button=None):
|
||||
displayed_fields = []
|
||||
|
||||
session = get_session()
|
||||
|
@ -302,6 +302,10 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
self.feed_current_data(magictoken)
|
||||
|
||||
form = self.create_form(page, displayed_fields)
|
||||
if submit_button is True:
|
||||
# submit_button at True means a non-submitting button has been
|
||||
# clicked; details in [ADD_ROW_BUTTON].
|
||||
form.clear_errors()
|
||||
if page_error_messages:
|
||||
form.add_global_errors(page_error_messages)
|
||||
if getattr(session, 'ajax_form_token', None):
|
||||
|
@ -735,7 +739,7 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
return self.validating(data)
|
||||
else:
|
||||
page_no = 0
|
||||
return self.page(self.pages[page_no], True)
|
||||
return self.page(self.pages[page_no], page_change=True)
|
||||
self.feed_current_data(None)
|
||||
if not self.pages:
|
||||
raise errors.TraversalError()
|
||||
|
@ -854,10 +858,11 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
# form.get_submit() returns the name of the clicked button, and
|
||||
# it will return True if the form has been submitted, but not
|
||||
# by clicking on a submit widget; for example if an "add row"
|
||||
# button is clicked.
|
||||
# button is clicked. [ADD_ROW_BUTTON]
|
||||
if form.has_errors() or form.get_submit() is True:
|
||||
return self.page(page, page_change=False,
|
||||
page_error_messages=page_error_messages)
|
||||
page_error_messages=page_error_messages,
|
||||
submit_button=form.get_submit())
|
||||
|
||||
form_data = session.get_by_magictoken(magictoken, {})
|
||||
with get_publisher().substitutions.temporary_feed(
|
||||
|
|
Loading…
Reference in New Issue