From b6ce40c521646dfe1718b89739891c7a9e20f029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 21 Aug 2019 14:34:27 +0200 Subject: [PATCH] fields: fix support for optional fields using data sources with id/q (#35514) --- tests/test_form_pages.py | 20 ++++++++++++++++++++ wcs/fields.py | 4 +++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index a60903ce2..3958e666a 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -5181,6 +5181,26 @@ remote.example.net = 1234 assert formdef.data_class().select()[0].data['0_display'] == 'hello' assert formdef.data_class().select()[0].data['0_structured'] == data['data'][0] + # check with optional field + formdef.fields[0].required = False + formdef.store() + + app = get_app(pub) + with mock.patch('qommon.misc.urlopen') as urlopen: + data = {'data': [{'id': '1', 'text': 'hello', 'extra': 'foo'}, + {'id': '2', 'text': 'world', 'extra': 'bar'}]} + urlopen.side_effect = lambda *args: StringIO.StringIO(json.dumps(data)) + resp = app.get('/test/') + pq = resp.pyquery.remove_namespaces() + select2_url = pq('select').attr['data-select2-url'] + + resp = resp.form.submit('submit') # -> validation page + assert resp.form['f0'].value == '' + assert resp.form['f0_label'].value == '' + + resp = resp.form.submit('submit') # -> submit + assert formdef.data_class().select()[0].data['0'] is None + def test_item_field_autocomplete_jsonp_source(http_requests, pub): user = create_user(pub) formdef = create_formdef() diff --git a/wcs/fields.py b/wcs/fields.py index 543cf4431..717cc8c65 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -1311,7 +1311,9 @@ class ItemField(WidgetField): def add_to_view_form(self, form, value = None): real_value = value - label_value = self.get_display_value(value) + label_value = '' + if value is not None: + label_value = self.get_display_value(value) self.field_key = 'f%s' % self.id get_request().form[self.field_key + '_label'] = label_value # :/