misc: extend |getlist on blocks, for compatibility names (#89777)
gitea/wcs/pipeline/head This commit looks good
Details
gitea/wcs/pipeline/head This commit looks good
Details
This commit is contained in:
parent
291fea5b8b
commit
da1be3fd7f
|
@ -5155,6 +5155,73 @@ def test_getlist_of_lazyformdata_field(pub):
|
|||
assert tmpl.render(context) == '1,2,3'
|
||||
|
||||
|
||||
def test_getlist_of_relation_in_block_field(pub):
|
||||
BlockDef.wipe()
|
||||
CardDef.wipe()
|
||||
FormDef.wipe()
|
||||
|
||||
carddef = CardDef()
|
||||
carddef.name = 'Card'
|
||||
carddef.fields = [
|
||||
fields.StringField(id='1', label='string', varname='str'),
|
||||
fields.NumericField(id='2', label='numeric', varname='num'),
|
||||
]
|
||||
carddef.store()
|
||||
ds = {'type': 'carddef:%s' % carddef.url_name}
|
||||
|
||||
block = BlockDef()
|
||||
block.name = 'foobar'
|
||||
block.fields = [
|
||||
fields.ItemField(id='1', label='card', varname='card', data_source=ds),
|
||||
]
|
||||
block.store()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test form'
|
||||
formdef.fields = [
|
||||
fields.BlockField(id='1', label='test', block_slug='foobar', max_items=3, varname='block'),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
carddef.data_class().wipe()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
carddatas = []
|
||||
for i in range(3):
|
||||
carddata = carddef.data_class()()
|
||||
carddata.data = {'1': str(i + 1), '2': i + 1}
|
||||
carddata.just_created()
|
||||
carddata.store()
|
||||
carddatas.append(carddata)
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {
|
||||
'1': {
|
||||
'data': [
|
||||
{'1': carddatas[0].id, '1_display': 'card'},
|
||||
{'1': carddatas[1].id, '1_display': 'card'},
|
||||
{'1': carddatas[2].id, '1_display': 'card'},
|
||||
{'1': carddatas[0].id, '1_display': 'card'},
|
||||
],
|
||||
'schema': {'1': 'item'},
|
||||
},
|
||||
}
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
|
||||
pub.substitutions.feed(formdata)
|
||||
context = pub.substitutions.get_context_variables(mode='lazy')
|
||||
tmpl = Template('{{ form_var_block|getlist:"card_live_var_str"|sum }}')
|
||||
assert tmpl.render(context) == '7'
|
||||
|
||||
tmpl = Template('{{ form_var_block|getlist:"card_live_var_num"|sum }}')
|
||||
assert tmpl.render(context) == '7'
|
||||
|
||||
with pytest.raises(AttributeError):
|
||||
tmpl = Template('{{ form_var_block|getlist:"card_live_var_plop"|sum }}')
|
||||
tmpl.render(context)
|
||||
|
||||
|
||||
def test_items_field_contains(pub):
|
||||
NamedDataSource.wipe()
|
||||
data_source = NamedDataSource(name='foobar')
|
||||
|
|
|
@ -1903,7 +1903,10 @@ class LazyFieldVarBlock(LazyFieldVar):
|
|||
if field.varname == key:
|
||||
break
|
||||
else:
|
||||
raise AttributeError('No such attribute %r' % key)
|
||||
value = [CompatibilityNamesDict({'X': x}).get(f'X_{key}') for x in self]
|
||||
if all(x is None for x in value):
|
||||
raise AttributeError('No such attribute %r' % key)
|
||||
return value
|
||||
return [data.get(field.id) for data in self._formdata.data.get(self._field.id)['data']]
|
||||
|
||||
def getlistdict(self, keys):
|
||||
|
|
Loading…
Reference in New Issue