misc: add backoffice fields support to |filter_by (#46173)

This commit is contained in:
Frédéric Péters 2020-08-28 11:47:11 +02:00
parent ab485f0f3e
commit ce23766bc9
2 changed files with 22 additions and 4 deletions

View File

@ -935,24 +935,34 @@ def test_lazy_formdata_queryset_distance(pub, variable_test_data):
def test_lazy_formdata_queryset_filter(pub, variable_test_data):
wf = Workflow.get_default_workflow()
wf.id = None
wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
wf.backoffice_fields_formdef.fields = [
fields.StringField(id='bo1', label='1st backoffice field',
type='string', varname='backoffice_blah'),
]
wf.store()
lazy_formdata = variable_test_data
formdef = lazy_formdata._formdef
formdef.workflow = wf
formdef.store()
data_class = lazy_formdata._formdef.data_class()
for i in range(6):
formdata = data_class()
formdata.data = {'0': 'bar'}
formdata.data = {'0': 'bar', 'bo1': 'plop1'}
formdata.just_created()
formdata.store()
for i in range(4):
formdata = data_class()
formdata.data = {'0': 'foo'}
formdata.data = {'0': 'foo', 'bo1': 'plop2'}
formdata.just_created()
formdata.jump_status('finished')
formdata.store()
formdata = data_class()
formdata.data = {'0': 'bar'}
formdata.data = {'0': 'bar', 'bo1': 'plop1'}
formdata.status = 'draft'
formdata.store()
@ -969,6 +979,14 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
queryset = lazy_formdata.objects.filter_by('foo_foo').apply_filter_value('X')
assert queryset.count == 0
# filter function on backoffice field
queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop1')
assert queryset.count == 6
queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop2')
assert queryset.count == 4
queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('X')
assert queryset.count == 0
# filter using attribute name
queryset = lazy_formdata.objects.filter_by_foo_foo().apply_filter_value('bar')
assert queryset.count == 7

View File

@ -123,7 +123,7 @@ class LazyFormDefObjectsManager(object):
def apply_filter_value(self, value):
assert self.pending_attr
for field in self._formdef.fields:
for field in self._formdef.get_all_fields():
if getattr(field, 'varname', None) == self.pending_attr:
from wcs import sql
criteria = Equal(sql.get_field_id(field), value)