From 3ac505eac543b927ae0c16b5c1bdba80d0319435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 28 Apr 2016 15:34:32 +0200 Subject: [PATCH] forms: always set prefill attributes (#10760) --- tests/test_form_pages.py | 12 +++++++++--- wcs/forms/root.py | 6 ++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 28f5c70..0ab65a6 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -2039,7 +2039,7 @@ def test_form_map_field_back_and_submit(pub): formdef = create_formdef() formdef.fields = [ fields.MapField(id='0', label='map'), - fields.StringField(id='1', label='street', required=False, + fields.StringField(id='1', label='street', required=True, prefill={'type': 'geolocation', 'value': 'road'}), ] formdef.store() @@ -2048,9 +2048,15 @@ def test_form_map_field_back_and_submit(pub): assert 'qommon.map.js' in resp.body assert 'qommon.geolocation.js' in resp.body # with a real user interaction this would get set by javascript - resp.forms[0]['f0$latlng'] = '1.234;-1.234' + resp.forms[0]['f0$latlng'].value = '1.234;-1.234' assert 'data-geolocation="road"' in resp.body + # check required field + resp = resp.forms[0].submit('submit') + assert not 'Check values then click submit.' in resp.body + assert 'data-geolocation="road"' in resp.body + resp.forms[0]['f1'].value = 'bla' + # check summary page resp = resp.forms[0].submit('submit') assert 'Check values then click submit.' in resp.body @@ -2074,7 +2080,7 @@ def test_form_map_field_back_and_submit(pub): assert formdef.data_class().count() == 1 data_id = formdef.data_class().select()[0].id data = formdef.data_class().get(data_id) - assert data.data == {'1': None, '0': '1.234;-1.234'} + assert data.data == {'1': 'bla', '0': '1.234;-1.234'} def test_form_map_multi_page(pub): formdef = create_formdef() diff --git a/wcs/forms/root.py b/wcs/forms/root.py index 3859304..c9a38ab 100644 --- a/wcs/forms/root.py +++ b/wcs/forms/root.py @@ -420,6 +420,12 @@ class FormPage(Directory): if not one: req.form = {} + for field in displayed_fields: + if field.prefill: + # always set additional attributes as they will be used for + # "live prefill", regardless of existing data. + form.get_widget('f%s' % field.id).prefill_attributes = field.get_prefill_attributes() + self.html_top(self.formdef.name) r += self.form_side(0, page_no, log_detail=log_detail, data=data) r += get_session().display_message() -- 2.8.1