forms: give prefilling access to form_parent_* variables (#54220)
This commit is contained in:
parent
4fb8aee1c8
commit
00540aa4f8
|
@ -8632,6 +8632,49 @@ def test_create_formdata_empty_item_ds_with_id_parameter(pub, create_formdata):
|
|||
assert pub.loggederror_class.count() == 0
|
||||
|
||||
|
||||
def test_create_formdata_locked_prefill_parent(create_formdata):
|
||||
create_formdata['source_formdef'].data_class().wipe()
|
||||
create_formdata['target_formdef'].data_class().wipe()
|
||||
|
||||
target_formdef = create_formdata['target_formdef']
|
||||
target_formdef.fields[0].prefill = {
|
||||
'type': 'string',
|
||||
'value': '{{form_parent_form_var_toto_string}}',
|
||||
'locked': True,
|
||||
}
|
||||
target_formdef.store()
|
||||
|
||||
app = get_app(create_formdata['pub'])
|
||||
resp = app.get('/source-form/')
|
||||
resp.form['f0'] = 'zob'
|
||||
resp.form['f1$file'] = Upload('test.txt', b'foobar', 'text/plain')
|
||||
resp.form['f2'] = '2'
|
||||
resp = resp.form.submit('submit') # -> validation
|
||||
resp = resp.form.submit('submit') # -> submission
|
||||
resp = resp.follow()
|
||||
assert create_formdata['target_formdef'].data_class().count() == 0
|
||||
resp = resp.form.submit('button_resubmit')
|
||||
assert create_formdata['target_formdef'].data_class().count() == 1
|
||||
target_formdata = create_formdata['target_formdef'].data_class().select()[0]
|
||||
assert target_formdata.data.get('0') == 'zob'
|
||||
assert target_formdata.status == 'draft'
|
||||
|
||||
resp = resp.follow()
|
||||
resp = resp.follow()
|
||||
assert resp.forms[1]['f0'].value == 'zob'
|
||||
assert resp.forms[1]['f0'].attrs['readonly']
|
||||
# try altering readonly field
|
||||
resp.forms[1]['f0'].value = 'xxx'
|
||||
resp = resp.forms[1].submit('submit')
|
||||
resp = resp.forms[1].submit('previous')
|
||||
assert resp.forms[1]['f0'].value == 'zob'
|
||||
resp = resp.forms[1].submit('submit')
|
||||
resp = resp.forms[1].submit('submit')
|
||||
assert create_formdata['target_formdef'].data_class().count() == 1
|
||||
target_formdata = create_formdata['target_formdef'].data_class().select()[0]
|
||||
assert target_formdata.data['0'] == 'zob'
|
||||
|
||||
|
||||
def test_js_libraries(pub):
|
||||
create_formdef()
|
||||
resp = get_app(pub).get('/test/', status=200)
|
||||
|
|
|
@ -739,6 +739,16 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
formdata.workflow_data = self.edited_data.workflow_data
|
||||
return formdata
|
||||
|
||||
if formdata.data.get('is_recalled_draft'):
|
||||
# restore submission context, this is required to get access to form_parent_* variables
|
||||
draft_formdata_id = formdata.data.get('draft_formdata_id')
|
||||
try:
|
||||
draft_formdata = self.formdef.data_class().get(draft_formdata_id)
|
||||
except KeyError: # it may not exist
|
||||
pass
|
||||
else:
|
||||
formdata.submission_context = draft_formdata.submission_context
|
||||
|
||||
if get_request().is_in_backoffice():
|
||||
formdata.user_id = None
|
||||
draft_formdata_id = formdata.data.get('draft_formdata_id')
|
||||
|
|
Loading…
Reference in New Issue