[Checkins] SVN: z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py Make it possible to choose 'nothing' for non-required single-select fields

Martin Aspeli optilude at gmx.net
Wed Mar 18 10:33:45 EDT 2009


Log message for revision 98238:
  Make it possible to choose 'nothing' for non-required single-select fields

Changed:
  U   z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py

-=-
Modified: z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py
===================================================================
--- z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py	2009-03-18 13:45:17 UTC (rev 98237)
+++ z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py	2009-03-18 14:33:44 UTC (rev 98238)
@@ -66,10 +66,13 @@
 class QuerySourceRadioWidget(z3c.form.browser.radio.RadioWidget):
     """Query source widget that allows single selection."""
     
+    _radio = True
     _queryform = None
     _resultsform = None
     _bound_source = None
 
+    noValueLabel = _(u'(nothing)')
+
     @property
     def source(self):
         """We need to bind the field to the context so that vocabularies
@@ -104,7 +107,8 @@
             if not isinstance(request_values, (tuple, set, list)):
                 request_values = (request_values,)
 
-            terms = set([source.getTermByToken(token) for token in request_values if token])
+            terms = set([source.getTermByToken(token) for token in request_values 
+                            if token and token != self.noValueToken])
 
         elif not self.ignoreContext:
             
@@ -141,6 +145,16 @@
         # update widget - will set self.value
         self.updateQueryWidget()
 
+        # add "novalue" option
+        if self._radio and not self.required:
+            self.items.insert(0, {
+                'id': self.id + '-novalue',
+                'name': self.name + ':list',
+                'value': self.noValueToken,
+                'label': self.noValueLabel,
+                'checked': not self.value or self.value[0] == self.noValueToken,
+                })
+
     def extract(self, default=z3c.form.interfaces.NOVALUE):
         value = self.extractQueryWidget(default)
         if value is z3c.form.interfaces.NOVALUE:
@@ -175,6 +189,8 @@
     
     zope.interface.implementsOnly(z3c.form.interfaces.ICheckBoxWidget)
 
+    _radio = False
+
     @property
     def source(self):
         return self.field.bind(self.context).value_type.source



More information about the Checkins mailing list