[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