forms: add an option to have items field shown in default criterias (#23369)

This commit is contained in:
Frédéric Péters 2018-05-28 15:33:54 +02:00
parent f89f11e154
commit e0f071b670
3 changed files with 17 additions and 2 deletions

View File

@ -594,6 +594,18 @@ def test_backoffice_default_filter(pub):
resp = app.get('/backoffice/management/form-title/')
assert 'filter-2-value' in resp.form.fields
# same check for items field
formdef.fields.append(
fields.ItemsField(id='4', label='4th field', type='items', items=['foo', 'bar', 'baz']))
formdef.store()
resp = app.get('/backoffice/management/form-title/')
assert not 'filter-4-value' in resp.form.fields
formdef.fields[-1].in_filters = True
formdef.store()
resp = app.get('/backoffice/management/form-title/')
assert 'filter-4-value' in resp.form.fields
def test_backoffice_bool_filter(pub):
create_superuser(pub)
create_environment(pub)

View File

@ -1027,7 +1027,7 @@ class FormPage(Directory):
elif mode == 'stats':
# enable period filters by default
field.enabled = (field.id in ('start', 'end'))
if field.type == 'item':
if field.type in ('item', 'items'):
field.enabled = field.in_filters
r += htmltext('<h3><span>%s</span> <span class="change">(<a id="filter-settings">%s</a>)</span></h3>' % (

View File

@ -1277,6 +1277,7 @@ class ItemsField(WidgetField):
items = []
max_choices = 0
data_source = {}
in_filters = False
display_disabled_items = False
widget_class = CheckboxesWidget
@ -1312,6 +1313,8 @@ class ItemsField(WidgetField):
def fill_admin_form(self, form):
WidgetField.fill_admin_form(self, form)
form.add(CheckboxWidget, 'in_filters', title=_('Display in default filters'),
value=self.in_filters, advanced=True)
form.add(WidgetList, 'items', title = _('Items'), element_type = StringWidget,
value = self.items, required = False,
element_kwargs = {'render_br': False, 'size': 50},
@ -1332,7 +1335,7 @@ class ItemsField(WidgetField):
def get_admin_attributes(self):
return WidgetField.get_admin_attributes(self) + ['items',
'max_choices', 'data_source', 'anonymise',
'max_choices', 'data_source', 'in_filters', 'anonymise',
'display_disabled_items']
def check_admin_form(self, form):