forms: feed transient_formdata when computing field values for postconditions (#59399)

This commit is contained in:
Benjamin Dauvergne 2021-12-07 17:00:46 +01:00 committed by Valentin Deniaud
parent ac667a5021
commit f3960f227c
2 changed files with 5 additions and 2 deletions

View File

@ -1218,6 +1218,7 @@ def test_dynamic_item_field_from_custom_view_on_cards(pub):
# use custom view as source
ds = {'type': 'carddef:%s:%s' % (carddef.url_name, custom_view.slug)}
formdef.fields = [
fields.PageField(id='2', label='1st page', type='page'),
fields.ItemField(id='0', type='item', label='item', varname='blah', items=['foo', 'bar', 'baz']),
fields.ItemField(id='1', label='string', type='item', data_source=ds, display_disabled_items=True),
]
@ -1237,12 +1238,13 @@ def test_dynamic_item_field_from_custom_view_on_cards(pub):
resp.form['f1'] = resp.form['f1'].options[0][0]
resp = resp.form.submit('submit') # -> validation page
assert 'Technical error' not in resp.text
resp = resp.form.submit('submit') # -> submit
assert formdef.data_class().select()[0].data['1'] in baz_ids
assert formdef.data_class().select()[0].data['1_structured']['item'] == 'baz'
# same in autocomplete mode
formdef.fields[1].display_mode = 'autocomplete'
formdef.fields[2].display_mode = 'autocomplete'
formdef.store()
app = get_app(pub)
resp = app.get('/test/')

View File

@ -1092,7 +1092,8 @@ class FormPage(Directory, FormTemplateMixin):
# variables.
form_data = copy.copy(session.get_by_magictoken(magictoken, {}))
try:
data = self.formdef.get_data(form, raise_on_error=True)
with get_publisher().substitutions.temporary_feed(transient_formdata, force_mode='lazy'):
data = self.formdef.get_data(form, raise_on_error=True)
except SetValueError:
return self.page(
page,