[Checkins] SVN: z3c.form/trunk/ Ensure at least min_length widgets are rendered for a MultiWidget in input mode.
Laurence Rowe
l at lrowe.co.uk
Fri Apr 15 07:33:34 EDT 2011
Log message for revision 121437:
Ensure at least min_length widgets are rendered for a MultiWidget in input mode.
Changed:
U z3c.form/trunk/CHANGES.txt
U z3c.form/trunk/src/z3c/form/widget.py
U z3c.form/trunk/src/z3c/form/widget.txt
-=-
Modified: z3c.form/trunk/CHANGES.txt
===================================================================
--- z3c.form/trunk/CHANGES.txt 2011-04-15 06:37:30 UTC (rev 121436)
+++ z3c.form/trunk/CHANGES.txt 2011-04-15 11:33:33 UTC (rev 121437)
@@ -5,6 +5,9 @@
2.4.3 (unreleased)
------------------
+- Ensure at least min_length widgets are rendered for a MultiWidget in input
+ mode.
+
- Added base of Czech translation.
- Added Portuguese Brazilian translation.
Modified: z3c.form/trunk/src/z3c/form/widget.py
===================================================================
--- z3c.form/trunk/src/z3c/form/widget.py 2011-04-15 06:37:30 UTC (rev 121436)
+++ z3c.form/trunk/src/z3c/form/widget.py 2011-04-15 11:33:33 UTC (rev 121437)
@@ -248,6 +248,7 @@
widgets = None
_value = None
+ _widgets_updated = False
_mode = FieldProperty(interfaces.IWidget['mode'])
@@ -344,6 +345,11 @@
"""Setup internal widgets based on the value_type for each value item.
"""
oldLen = len(self.widgets)
+ # Ensure at least min_length widgets are shown
+ if (zope.schema.interfaces.IMinMaxLen.providedBy(self.field) and
+ self.mode == interfaces.INPUT_MODE and self.allowAdding and
+ oldLen < self.field.min_length):
+ oldLen = self.field.min_length
self.widgets = []
idx = 0
if self.value:
@@ -359,6 +365,7 @@
widget = self.getWidget(idx)
self.widgets.append(widget)
idx += 1
+ self._widgets_updated = True
def updateAllowAddRemove(self):
"""Update the allowAdding/allowRemoving attributes
@@ -383,6 +390,13 @@
self.updateWidgets()
return property(get, set)
+ def update(self):
+ """See z3c.form.interfaces.IWidget."""
+ # Ensure that updateWidgets is called.
+ super(MultiWidget, self).update()
+ if not self._widgets_updated:
+ self.updateWidgets()
+
def extract(self, default=interfaces.NO_VALUE):
# This method is responsible to get the widgets value based on the
# request and nothing else.
Modified: z3c.form/trunk/src/z3c/form/widget.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/widget.txt 2011-04-15 06:37:30 UTC (rev 121436)
+++ z3c.form/trunk/src/z3c/form/widget.txt 2011-04-15 11:33:33 UTC (rev 121437)
@@ -642,6 +642,12 @@
>>> request = TestRequest()
>>> multiWidget = widget.FieldWidget(multiField, widget.MultiWidget(request))
+Lets ensure that the minimum number of widgets are created.
+
+ >>> multiWidget.update()
+ >>> len(multiWidget.widgets)
+ 2
+
Now, let's check if the function will do the right thing depending on
the value:
More information about the checkins
mailing list