misc: save custom view digest in items filtered on the custom view (#64942)

This commit is contained in:
Frédéric Péters 2022-05-06 11:46:49 +02:00
parent 53b1ba16f3
commit 585a60f3fc
2 changed files with 26 additions and 5 deletions

View File

@ -5819,7 +5819,7 @@ def test_item_field_from_custom_view_on_cards(pub):
CardDef.wipe()
carddef = CardDef()
carddef.name = 'items'
carddef.digest_templates = {'default': '{{form_var_name}}'}
carddef.digest_templates = {'default': '{{form_var_attr}}'}
carddef.workflow_roles = {'_editor': user.roles[0]}
carddef.fields = [
fields.ItemField(id='0', type='item', label='item', varname='item', items=['foo', 'bar', 'baz']),
@ -5833,7 +5833,7 @@ def test_item_field_from_custom_view_on_cards(pub):
carddata.data = {
'0': value,
'0_display': value,
'1': 'attr%s' % i,
'1': 'attr%s' % (i + 1),
}
carddata.just_created()
carddata.store()
@ -5870,12 +5870,32 @@ def test_item_field_from_custom_view_on_cards(pub):
resp = get_app(pub).get('/test/')
assert len(resp.form['f0'].options) == 10
baz_id = list(baz_ids)[0]
assert {x[0] for x in resp.form['f0'].options} == baz_ids
resp.form['f0'].value = baz_id
resp = resp.form.submit('submit') # -> validation page
resp = resp.form.submit('submit') # -> submit
assert formdef.data_class().select()[0].data['0'] in baz_ids
assert formdef.data_class().select()[0].data['0'] == baz_id
assert formdef.data_class().select()[0].data['0_display'] == 'attr%s' % baz_id
assert formdef.data_class().select()[0].data['0_structured']['item'] == 'baz'
# give custom view it a custom digest
formdef.data_class().wipe()
carddef.digest_templates['custom-view:%s' % custom_view.slug] = 'X{{form_var_attr}}Y'
carddef.store()
# compute digests
for carddata in carddef.data_class().select():
carddata.store()
resp = get_app(pub).get('/test/')
assert len(resp.form['f0'].options) == 10
assert {x[0] for x in resp.form['f0'].options} == baz_ids
resp.form['f0'].value = baz_id
resp = resp.form.submit('submit') # -> validation page
resp = resp.form.submit('submit') # -> submit
assert formdef.data_class().select()[0].data['0'] == baz_id
assert formdef.data_class().select()[0].data['0_display'] == 'Xattr%sY' % baz_id
@pytest.mark.parametrize('filter_value', ['{{ "foo" }}', 'foo'])
def test_items_field_from_custom_view_on_cards(pub, filter_value):

View File

@ -197,13 +197,14 @@ class CardDef(FormDef):
criterias = [StrictNotEqual('status', 'draft'), Null('anonymised')]
order_by = None
digest_key = 'default'
if len(parts) > 2 and not get_by_id:
if len(parts) > 2:
if custom_view is None:
custom_view = cls.get_data_source_custom_view(data_source_id, carddef=carddef)
if not custom_view:
return []
order_by = custom_view.order_by
criterias.extend(custom_view.get_criterias(formdef=carddef, compile_templates=True))
if not get_by_id:
criterias.extend(custom_view.get_criterias(formdef=carddef, compile_templates=True))
if custom_view:
view_digest_key = 'custom-view:%s' % custom_view.get_url_slug()