[Checkins] SVN: z3c.form/trunk/src/z3c/form/ multiwidget mixed up field and widget values
Adam Groszer
agroszer at gmail.com
Mon Dec 15 07:31:12 EST 2008
Log message for revision 94072:
multiwidget mixed up field and widget values
Changed:
U z3c.form/trunk/src/z3c/form/browser/objectmulti.txt
U z3c.form/trunk/src/z3c/form/testing.py
U z3c.form/trunk/src/z3c/form/widget.py
-=-
Modified: z3c.form/trunk/src/z3c/form/browser/objectmulti.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/browser/objectmulti.txt 2008-12-15 11:39:49 UTC (rev 94071)
+++ z3c.form/trunk/src/z3c/form/browser/objectmulti.txt 2008-12-15 12:31:11 UTC (rev 94072)
@@ -110,18 +110,16 @@
>>> from z3c.form.widget import FieldWidget
- >>> from z3c.form.testing import IMySubObject
- >>> from z3c.form.testing import IMySecond
- >>> from z3c.form.testing import MySubObject
- >>> from z3c.form.testing import MySecond
+ >>> from z3c.form.testing import IMySubObjectMulti
+ >>> from z3c.form.testing import MySubObjectMulti
>>> from z3c.form.object import registerFactoryAdapter
- >>> registerFactoryAdapter(IMySubObject, MySubObject)
+ >>> registerFactoryAdapter(IMySubObjectMulti, MySubObjectMulti)
>>> field = zope.schema.List(
... __name__='foo',
... value_type=zope.schema.Object(title=u'my object widget',
- ... schema=IMySubObject),
+ ... schema=IMySubObjectMulti),
... )
>>> widget = FieldWidget(field, widget)
@@ -182,6 +180,67 @@
>>> widget.update()
+It must not fail if we assign values that do not meet the constraints,
+just cry about it in the HTML:
+
+ >>> widget.value = [{'foofield': None, 'barfield': 666}]
+ >>> print widget.render()
+ <div class="multi-widget required">
+ <div id="foo-0-row" class="row">
+ <div class="label">
+ <label for="foo-0">
+ <span>my object widget</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="widget">
+ <div class="multi-widget-checkbox">
+ <input id="foo-0-remove" name="foo.0.remove"
+ class="multi-widget-checkbox checkbox-widget"
+ type="checkbox" value="1" />
+ </div>
+ <div class="multi-widget-input"><div class="object-widget required">
+ <div class="label">
+ <label for="foo-0-widgets-foofield">
+ <span>My foo field</span>
+ <span class="required">*</span>
+ </label>
+ </div>
+ <div class="error">
+ <div class="error">Required input is missing.</div>
+ </div>
+ <div class="widget">
+ <input id="foo-0-widgets-foofield" name="foo.0.widgets.foofield"
+ class="text-widget required int-field" type="text" />
+ </div>
+ <div class="label">
+ <label for="foo-0-widgets-barfield">
+ <span>My dear bar</span>
+ </label>
+ </div>
+ <div class="widget">
+ <input id="foo-0-widgets-barfield" name="foo.0.widgets.barfield"
+ class="text-widget int-field" value="666" type="text" />
+ </div>
+ <input name="foo.0-empty-marker" type="hidden" value="1" />
+ </div>
+ </div>
+ </div>
+ <div class="error">
+ <div class="error">Wrong contained type</div>
+ </div>
+ </div>
+ <div class="buttons">
+ <input id="foo-buttons-add" name="foo.buttons.add"
+ class="submit-widget button-field" value="Add" type="submit" />
+ <input id="foo-buttons-remove" name="foo.buttons.remove"
+ class="submit-widget button-field" value="Remove" type="submit" />
+ </div>
+ </div>
+ <input type="hidden" name="foo.count" value="1" />
+
+Let's set acceptable values:
+
>>> widget.value = [dict(foofield=42, barfield=666),
... dict(foofield=789, barfield=321)]
@@ -422,7 +481,7 @@
<input class="text-widget required int-field"
id="foo-2-widgets-foofield"
name="foo.2.widgets.foofield"
- type="text" value="1,111">
+ type="text" value="">
</div>
<div class="label">
<label for="foo-2-widgets-barfield">
@@ -461,8 +520,8 @@
>>> value = converter.toFieldValue(value)
>>> value
- [<z3c.form.testing.MySubObject object at ...>,
- <z3c.form.testing.MySubObject object at ...>]
+ [<z3c.form.testing.MySubObjectMulti object at ...>,
+ <z3c.form.testing.MySubObjectMulti object at ...>]
>>> value[0].foofield
42
@@ -624,8 +683,8 @@
>>> value = converter.toFieldValue(value)
>>> value
- [<z3c.form.testing.MySubObject object at ...>,
- <z3c.form.testing.MySubObject object at ...>]
+ [<z3c.form.testing.MySubObjectMulti object at ...>,
+ <z3c.form.testing.MySubObjectMulti object at ...>]
>>> value[0].foofield
42
@@ -751,8 +810,8 @@
>>> value = converter.toFieldValue(value)
>>> value
- [<z3c.form.testing.MySubObject object at ...>,
- <z3c.form.testing.MySubObject object at ...>]
+ [<z3c.form.testing.MySubObjectMulti object at ...>,
+ <z3c.form.testing.MySubObjectMulti object at ...>]
>>> value[0].foofield
42
@@ -883,7 +942,7 @@
>>> field = zope.schema.List(
... __name__='foo',
... value_type=zope.schema.Object(title=u'ignored_title',
- ... schema=IMySubObject),
+ ... schema=IMySubObjectMulti),
... )
>>> request = TestRequest()
>>> widget = multi.MultiWidget(request)
Modified: z3c.form/trunk/src/z3c/form/testing.py
===================================================================
--- z3c.form/trunk/src/z3c/form/testing.py 2008-12-15 11:39:49 UTC (rev 94071)
+++ z3c.form/trunk/src/z3c/form/testing.py 2008-12-15 12:31:11 UTC (rev 94072)
@@ -114,7 +114,8 @@
foofield = zope.schema.Int(
title=u"My foo field",
default=1111,
- max=9999)
+ max=9999,
+ required=True)
barfield = zope.schema.Int(
title=u"My dear bar",
default=2222,
@@ -160,6 +161,23 @@
self.subobject=subobject
self.name=name
+class IMySubObjectMulti(zope.interface.Interface):
+ foofield = zope.schema.Int(
+ title=u"My foo field",
+ default=None, #default is None here!
+ max=9999,
+ required=True)
+ barfield = zope.schema.Int(
+ title=u"My dear bar",
+ default=2222,
+ required=False)
+
+class MySubObjectMulti(object):
+ zope.interface.implements(IMySubObjectMulti)
+
+ foofield = FieldProperty(IMySubObjectMulti['foofield'])
+ barfield = FieldProperty(IMySubObjectMulti['barfield'])
+
#
#
#############################
Modified: z3c.form/trunk/src/z3c/form/widget.py
===================================================================
--- z3c.form/trunk/src/z3c/form/widget.py 2008-12-15 11:39:49 UTC (rev 94071)
+++ z3c.form/trunk/src/z3c/form/widget.py 2008-12-15 12:31:11 UTC (rev 94072)
@@ -303,7 +303,7 @@
try:
# convert widget value to field value
converter = interfaces.IDataConverter(widget)
- value = converter.toFieldValue(value)
+ fvalue = converter.toFieldValue(value)
# validate field value
zope.component.getMultiAdapter(
(self.context,
@@ -311,9 +311,9 @@
self.form,
getattr(widget, 'field', None),
widget),
- interfaces.IValidator).validate(value)
+ interfaces.IValidator).validate(fvalue)
# convert field value to widget value
- widget.value = converter.toWidgetValue(value)
+ widget.value = converter.toWidgetValue(fvalue)
except (zope.schema.ValidationError, ValueError), error:
# on exception, setup the widget error message
view = zope.component.getMultiAdapter(
More information about the Checkins
mailing list