variables: handle filtering lists by any of values (#56089)
This commit is contained in:
parent
e08efa3643
commit
d59ee3cb65
|
@ -1603,17 +1603,18 @@ def test_lazy_global_forms(pub):
|
|||
formdef.fields = [
|
||||
fields.StringField(id='1', label='Test', type='string', varname='foo'),
|
||||
fields.StringField(id='2', label='key', type='string', varname='key'),
|
||||
fields.ItemsField(id='3', label='Items', type='items', varname='items'),
|
||||
]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
for i in range(6):
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {'1': 'bar', '2': str(i)}
|
||||
formdata.data = {'1': 'bar', '2': str(i), '3': [str(i % 2), str(i % 3)]}
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
for i in range(4):
|
||||
formdata = formdef.data_class()()
|
||||
formdata.data = {'1': 'foo', '2': str(i + 6)}
|
||||
formdata.data = {'1': 'foo', '2': str(i + 6), '3': [str(i)]}
|
||||
formdata.just_created()
|
||||
formdata.jump_status('finished')
|
||||
formdata.store()
|
||||
|
@ -1631,6 +1632,25 @@ def test_lazy_global_forms(pub):
|
|||
tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"foo"|filter_value:"bar"|count}}')
|
||||
assert tmpl.render(context) == '6'
|
||||
|
||||
# filter value by multiple valued field
|
||||
tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"items"|filter_value:"3"|count}}')
|
||||
assert tmpl.render(context) == '1'
|
||||
|
||||
tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"items"|filter_value:"2"|count}}')
|
||||
assert tmpl.render(context) == '3'
|
||||
|
||||
tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"items"|filter_value:"1|2"|count}}')
|
||||
assert tmpl.render(context) == '7'
|
||||
|
||||
tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"items"|filter_value:"6"|count}}')
|
||||
assert tmpl.render(context) == '0'
|
||||
|
||||
tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"items"|exclude_value:"1|2"|count}}')
|
||||
assert tmpl.render(context) == '3'
|
||||
|
||||
tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"items"|exclude_value:"6"|count}}')
|
||||
assert tmpl.render(context) == '10'
|
||||
|
||||
pub.custom_view_class.wipe()
|
||||
|
||||
custom_view1 = pub.custom_view_class()
|
||||
|
|
|
@ -25,7 +25,7 @@ from .carddef import CardDef
|
|||
from .formdef import FormDef
|
||||
from .qommon import _, force_str, misc
|
||||
from .qommon.evalutils import make_datetime
|
||||
from .qommon.storage import Equal, NotEqual, Null, Or
|
||||
from .qommon.storage import Equal, Intersects, Not, NotEqual, Null, Or
|
||||
from .qommon.substitution import CompatibilityNamesDict
|
||||
from .qommon.templatetags.qommon import parse_datetime
|
||||
|
||||
|
@ -202,10 +202,14 @@ class LazyFormDefObjectsManager:
|
|||
from wcs import sql
|
||||
|
||||
field_id = sql.get_field_id(field)
|
||||
if exclude:
|
||||
criterias = NotEqual(field_id, value, field=field)
|
||||
if isinstance(value, list):
|
||||
criterias = Intersects(field_id, value, field=field)
|
||||
else:
|
||||
criterias = Equal(field_id, value, field=field)
|
||||
|
||||
if exclude:
|
||||
criterias = Not(criterias)
|
||||
|
||||
return self._clone(self._criterias + [criterias])
|
||||
|
||||
def apply_exclude_value(self, value):
|
||||
|
|
Loading…
Reference in New Issue