From d1a2bb1e92a95642173dde6cb76228a3612989f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 10 Jun 2020 08:41:24 +0200 Subject: [PATCH] transfer form value --- tests/test_form_pages.py | 2 +- wcs/fields.py | 1 + wcs/forms/root.py | 5 +---- wcs/qommon/form.py | 20 ++++++++++++++++++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 03160ef86..6d3e99a61 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -1253,11 +1253,11 @@ def test_form_titles(pub): resp.form['f1'] = 'foo' resp = resp.form.submit('submit') assert '

title of second page

' in resp.text + resp.form['f3'] = 'foo' resp = resp.form.submit('submit') # -> validation page assert '

1st page

' in resp.text assert '

subtitle of 1st page

' in resp.text assert '

title of second page

' in resp.text - resp.form['f3'] = 'foo' resp = resp.form.submit('submit').follow() # -> submit assert '

1st page

' in resp.text assert not '

1st page

' in resp.text diff --git a/wcs/fields.py b/wcs/fields.py index 71811d6b9..082cd1b30 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -541,6 +541,7 @@ class WidgetField(Field): form.add(self.widget_class, self.field_key, title = self.label, value = value, readonly = 'readonly', **kwargs) widget = form.get_widget(self.field_key) + widget.transfer_form_value(get_request()) if self.extra_css_class: if hasattr(widget, 'extra_css_class') and widget.extra_css_class: widget.extra_css_class = '%s %s' % (widget.extra_css_class, self.extra_css_class) diff --git a/wcs/forms/root.py b/wcs/forms/root.py index a5abf3ada..84bab2303 100644 --- a/wcs/forms/root.py +++ b/wcs/forms/root.py @@ -386,6 +386,7 @@ class FormPage(Directory, FormTemplateMixin): if not isinstance(v, str) and field.convert_value_to_str: v = field.convert_value_to_str(v) form.get_widget('f%s' % k).set_value(v) + form.get_widget('f%s' % k).transfer_form_value(req) if field.type == 'item' and v and form.get_widget('f%s' % k).value != v: # mark field as invalid if the value was not accepted # (this is required by quixote>=3 as the value would @@ -395,10 +396,6 @@ class FormPage(Directory, FormTemplateMixin): if locked: form.get_widget('f%s' % k).readonly = 'readonly' form.get_widget('f%s' % k).attrs['readonly'] = 'readonly' - if field.key == 'map': - req.form['f%s$latlng' % k] = v - else: - req.form['f%s' % k] = v had_prefill = True if had_prefill: diff --git a/wcs/qommon/form.py b/wcs/qommon/form.py index d06bc96ec..aa712c35f 100644 --- a/wcs/qommon/form.py +++ b/wcs/qommon/form.py @@ -309,6 +309,15 @@ def get_selection_error_text(*args): SelectWidget.SELECTION_ERROR = property(get_selection_error_text) +def transfer_form_value(self, request): + # transfer form value (set in constructor, or using set_value) to + # request.form{} + request.form[self.name] = self.value + + +Widget.transfer_form_value = transfer_form_value + + class Form(QuixoteForm): TOKEN_NOTICE = N_( "The form you have submitted is invalid. Most " @@ -487,6 +496,9 @@ class HtmlWidget(object): def clear_error(self, request=None): pass + def transfer_form_value(self, request): + pass + class CommentWidget(Widget): template_name = 'qommon/forms/widgets/comment.html' @@ -509,6 +521,10 @@ class CommentWidget(Widget): class CompositeWidget(quixote.form.CompositeWidget): content_extra_attributes = {'role': 'group'} + def transfer_form_value(self, request): + for widget in self.get_widgets(): + widget.transfer_form_value(request) + def render_as_thead(self): r = TemplateIO(html=True) r += htmltext('\n') @@ -1433,6 +1449,10 @@ class WidgetList(quixote.form.widget.WidgetList): def add_media(self): get_response().add_javascript(['jquery.js', 'widget_list.js']) + def transfer_form_value(self, request): + for widget in self.get_widgets(): + widget.transfer_form_value(request) + def render(self): return render(self)