forms: clean context before displaying a new page (#48950)

This commit is contained in:
Frédéric Péters 2020-11-28 14:47:03 +01:00
parent 78e3487319
commit 0b654ac4a5
2 changed files with 58 additions and 0 deletions

View File

@ -6157,6 +6157,63 @@ def test_dynamic_item_field_from_custom_view_on_cards(pub):
assert formdef.data_class().select()[0].data['1_structured']['item'] == 'baz'
def test_item_field_from_cards_check_lazy_live(pub):
create_user(pub)
formdef = create_formdef()
formdef.data_class().wipe()
CardDef.wipe()
carddef = CardDef()
carddef.name = 'items'
carddef.digest_template = '{{form_var_name}}'
carddef.fields = [
fields.StringField(id='0', label='string', varname='name'),
fields.StringField(id='1', label='string', varname='attr'),
]
carddef.store()
carddef.data_class().wipe()
for i, value in enumerate(['foo', 'bar', 'baz']):
carddata = carddef.data_class()()
carddata.data = {
'0': value,
'1': 'attr%s' % i,
}
carddata.just_created()
carddata.store()
ds = {'type': 'carddef:%s' % carddef.url_name}
formdef.fields = [
fields.PageField(id='0', label='1st page', type='page'),
fields.ItemField(id='1', label='string', type='item', varname='item', data_source=ds),
fields.PageField(id='2', label='2nd page', type='page'),
fields.CommentField(id='3', label='live value: {{ form_var_item_live_var_attr }}', type='comment'),
fields.PageField(id='4', label='3rd page', type='page'),
]
formdef.store()
resp = get_app(pub).get('/test/')
resp.form['f1'] = '2'
resp = resp.form.submit('submit') # -> 2nd page
assert 'live value: attr1' in resp
# add a field with a condition on first page and third page
formdef.fields[1:1] = [
fields.StringField(id='5', label='field with condition', type='string',
required=False, condition={'type': 'django', 'value': '1'}),
]
formdef.fields.append(
fields.StringField(id='6', label='second field with condition', type='string',
required=False, condition={'type': 'django', 'value': '1'}))
formdef.store()
resp = get_app(pub).get('/test/')
resp.form['f1'] = '2'
resp = resp.form.submit('submit') # -> 2nd page
assert 'live value: attr1' in resp
resp = resp.form.submit('submit') # -> 3rd page
resp = resp.form.submit('previous') # -> 2nd page
assert 'live value: attr1' in resp
def test_item_field_with_disabled_items(http_requests, pub):
user = create_user(pub)
formdef = create_formdef()

View File

@ -980,6 +980,7 @@ class FormPage(Directory, FormTemplateMixin):
# the page has been successfully submitted, maybe new pages
# should be revealed.
self.clean_submission_context()
self.feed_current_data(magictoken)
self.reset_pages_cache()