diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py
index d374111a2..9d1c9a202 100644
--- a/tests/test_form_pages.py
+++ b/tests/test_form_pages.py
@@ -5563,6 +5563,43 @@ def test_field_live_condition(pub):
assert 'Bar' in resp.body
assert 'Foo' in resp.body
+def test_field_live_items_condition(pub):
+ FormDef.wipe()
+ formdef = FormDef()
+ formdef.name = 'Foo'
+ formdef.fields = [
+ fields.ItemsField(type='items', id='1', label='Bar',
+ items=['a', 'b'], varname='bar'),
+ fields.StringField(type='string', id='2', label='Foo', size='40',
+ required=True, varname='foo',
+ condition={'type': 'django', 'value': '"b" in form_var_bar'}),
+ ]
+ formdef.store()
+
+ user = create_user(pub)
+ app = login(get_app(pub), username='foo', password='foo')
+ resp = app.get('/foo/')
+ assert 'f1$element0' in resp.form.fields
+ assert 'f1$element1' in resp.form.fields
+ assert 'f2' in resp.form.fields
+ assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true'
+ assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none'
+ resp.form['f1$element0'].checked = True
+ app.post('/foo/autosave', params=resp.form.submit_fields())
+ live_resp = app.post('/foo/live', params=resp.form.submit_fields())
+ assert live_resp.json['result']['1']['visible']
+ assert not live_resp.json['result']['2']['visible']
+ resp.form['f1$element1'].checked = True
+ app.post('/foo/autosave', params=resp.form.submit_fields())
+ live_resp = app.post('/foo/live', params=resp.form.submit_fields())
+ assert live_resp.json['result']['1']['visible']
+ assert live_resp.json['result']['2']['visible']
+ resp.form['f1$element0'].checked = False
+ resp.form['f1$element1'].checked = False
+ live_resp = app.post('/foo/live', params=resp.form.submit_fields())
+ assert live_resp.json['result']['1']['visible']
+ assert not live_resp.json['result']['2']['visible']
+
def test_field_condition_on_required_field(pub):
# from https://dev.entrouvert.org/issues/27247
FormDef.wipe()
diff --git a/wcs/formdef.py b/wcs/formdef.py
index 570f94e9e..37d50f705 100644
--- a/wcs/formdef.py
+++ b/wcs/formdef.py
@@ -626,17 +626,17 @@ class FormDef(StorableObject):
def get_field_data(self, field, widget):
d = {}
d[field.id] = widget.parse()
- if d.get(field.id) and field.convert_value_from_str:
+ if d.get(field.id) is not None and field.convert_value_from_str:
d[field.id] = field.convert_value_from_str(d[field.id])
- if d.get(field.id) and field.store_display_value:
+ if d.get(field.id) is not None and field.store_display_value:
display_value = field.store_display_value(d, field.id)
- if display_value:
+ if display_value is not None:
d['%s_display' % field.id] = display_value
elif d.has_key('%s_display' % field.id):
del d['%s_display' % field.id]
- if d.get(field.id) and field.store_structured_value:
+ if d.get(field.id) is not None and field.store_structured_value:
structured_value = field.store_structured_value(d, field.id)
- if structured_value:
+ if structured_value is not None:
d['%s_structured' % field.id] = structured_value
elif '%s_structured' % field.id in d:
del d['%s_structured' % field.id]