forms: add support for _live subvariables in cascaded computed fields (#59305)
This commit is contained in:
parent
cd70082556
commit
6808368cab
|
@ -623,13 +623,19 @@ def test_computed_field_with_data_source(pub):
|
|||
freeze_on_initial_value=True,
|
||||
data_source=ds,
|
||||
),
|
||||
fields.CommentField(id='2', label='X{{ form_var_computed_live_var_name }}Y', type='comment'),
|
||||
fields.ComputedField(
|
||||
id='2', label='computed2', varname='b', value_template='B{{form_var_computed_live_var_name}}B'
|
||||
),
|
||||
fields.CommentField(id='3', label='X{{ form_var_computed_live_var_name }}Y', type='comment'),
|
||||
fields.CommentField(id='4', label='X{{ form_var_b }}Y', type='comment'),
|
||||
]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
resp = get_app(pub).get('/test/?param=%s' % carddata.id)
|
||||
assert 'XbazY' in resp.text
|
||||
assert 'XBbazBY' in resp.text
|
||||
|
||||
resp = get_app(pub).get('/test/?param=%s' % 'invalid')
|
||||
assert 'XY' in resp.text
|
||||
assert 'XBBY' in resp.text
|
||||
|
|
|
@ -646,10 +646,14 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
# create a temporary map using form variable names, to be used as context
|
||||
# variables during evaluation (via temporary_feed below), so we can have
|
||||
# computed fields depending on previously computed fields from the same page.
|
||||
from wcs.variables import LazyFieldVarComputed
|
||||
|
||||
mapped_computed_values = {}
|
||||
for field in fields:
|
||||
if field.id in computed_values:
|
||||
mapped_computed_values['form_var_%s' % field.varname] = computed_values[field.id]
|
||||
mapped_computed_values['form_var_%s' % field.varname] = LazyFieldVarComputed(
|
||||
{str(field.id): computed_values[field.id]}, field=field
|
||||
)
|
||||
|
||||
with get_publisher().substitutions.temporary_feed(mapped_computed_values, force_mode='lazy'):
|
||||
for field in fields:
|
||||
|
@ -666,7 +670,9 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
else:
|
||||
value = get_publisher().get_cached_complex_data(value)
|
||||
computed_values[field.id] = value
|
||||
mapped_computed_values['form_var_%s' % field.varname] = value
|
||||
mapped_computed_values['form_var_%s' % field.varname] = LazyFieldVarComputed(
|
||||
{str(field.id): computed_values[field.id]}, field=field
|
||||
)
|
||||
get_publisher().substitutions.invalidate_cache()
|
||||
|
||||
return computed_values
|
||||
|
|
Loading…
Reference in New Issue