[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