forms: clean context before displaying a new page (#48950)
This commit is contained in:
parent
78e3487319
commit
0b654ac4a5
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
Loading…
Reference in New Issue