[Checkins] SVN: zope.app.form/trunk/ Source select widgets for required fields are now required as well.
Thomas Lotze
tl at gocept.com
Thu Aug 21 08:33:25 EDT 2008
Log message for revision 90060:
Source select widgets for required fields are now required as well.
The old behaviour is still available for BBB but turned out to be a bug
except for dropdown widgets where the browser has to select some value
when displaying the widget.
Changed:
U zope.app.form/trunk/CHANGES.txt
U zope.app.form/trunk/src/zope/app/form/browser/source.py
U zope.app.form/trunk/src/zope/app/form/browser/source.txt
-=-
Modified: zope.app.form/trunk/CHANGES.txt
===================================================================
--- zope.app.form/trunk/CHANGES.txt 2008-08-21 10:16:39 UTC (rev 90059)
+++ zope.app.form/trunk/CHANGES.txt 2008-08-21 12:33:25 UTC (rev 90060)
@@ -8,7 +8,11 @@
- Dropdown widgets display an item for the missing value even if the field is
required when no value is selected. See zope/app/form/browser/README.txt on
how to switch this off for BBB.
+- Source select widgets for required fields are now required as well. They
+ used not to be required on the assumption that some value would be selected
+ by the browser, which had always been wrong except for dropdown widgets.
+
3.5.0 (2008-06-05)
==================
Modified: zope.app.form/trunk/src/zope/app/form/browser/source.py
===================================================================
--- zope.app.form/trunk/src/zope/app/form/browser/source.py 2008-08-21 10:16:39 UTC (rev 90059)
+++ zope.app.form/trunk/src/zope/app/form/browser/source.py 2008-08-21 12:33:25 UTC (rev 90060)
@@ -35,7 +35,9 @@
from zope.app.form.browser import \
SelectWidget, RadioWidget, MultiSelectWidget, OrderedMultiSelectWidget, \
MultiCheckBoxWidget, MultiSelectSetWidget, MultiSelectFrozenSetWidget
+import zope.app.form.browser.itemswidgets
+
class SourceDisplayWidget(zope.app.form.browser.widget.DisplayWidget):
implements(zope.app.form.interfaces.IDisplayWidget)
@@ -552,9 +554,11 @@
def __init__(self, field, source, request):
super(SourceSelectWidget, self).__init__(
field, IterableSourceVocabulary(source, request), request)
- # Even if the field is required, no input is needed, so don't
- # worry the user about it:
- self.required = False
+ # BBB
+ if not zope.app.form.browser.itemswidgets.EXPLICIT_EMPTY_SELECTION:
+ # Even if the field is required, no input is needed, so don't
+ # worry the user about it:
+ self.required = False
class SourceDropdownWidget(SourceSelectWidget):
"""Variation of the SourceSelectWidget that uses a drop-down list."""
Modified: zope.app.form/trunk/src/zope/app/form/browser/source.txt
===================================================================
--- zope.app.form/trunk/src/zope/app/form/browser/source.txt 2008-08-21 10:16:39 UTC (rev 90059)
+++ zope.app.form/trunk/src/zope/app/form/browser/source.txt 2008-08-21 12:33:25 UTC (rev 90060)
@@ -116,6 +116,17 @@
<input name="field.dog-empty-marker" type="hidden" value="1" />
</div>
+Since the field ist required, an empty selection is not valid:
+
+ >>> widget.getInputValue()
+ Traceback (most recent call last):
+ MissingInputError: ('field.dog', u'Dogs', None)
+
+Also, the widget is required in this case:
+
+ >>> widget.required
+ True
+
If the request contains a value, it is marked as selected::
>>> request.form["field.dog-empty-marker"] = "1"
More information about the Checkins
mailing list