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)