[Checkins] SVN: z3c.formwidget.query/trunk/src/z3c/formwidget/query/ Make this work with vocabularies as sources by binding the field within the widget
Alec Mitchell
apm13 at columbia.edu
Sun Oct 12 12:08:25 EDT 2008
Log message for revision 92086:
Make this work with vocabularies as sources by binding the field within the widget
Changed:
U z3c.formwidget.query/trunk/src/z3c/formwidget/query/README.txt
U z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py
-=-
Modified: z3c.formwidget.query/trunk/src/z3c/formwidget/query/README.txt
===================================================================
--- z3c.formwidget.query/trunk/src/z3c/formwidget/query/README.txt 2008-10-12 15:30:30 UTC (rev 92085)
+++ z3c.formwidget.query/trunk/src/z3c/formwidget/query/README.txt 2008-10-12 16:08:24 UTC (rev 92086)
@@ -84,7 +84,6 @@
... city = None
>>> location = Location()
- >>> field = city.bind(location)
>>> from z3c.formwidget.query.widget import QuerySourceFieldRadioWidget
@@ -99,7 +98,7 @@
An empty query is not carried out.
- >>> widget = setupWidget(field, location, request)
+ >>> widget = setupWidget(city, location, request)
>>> 'type="radio"' in widget()
False
@@ -107,7 +106,7 @@
>>> location.city = u"Palermo"
- >>> widget = setupWidget(field, location, request)
+ >>> widget = setupWidget(city, location, request)
We now expect a radio button to be present.
@@ -119,7 +118,7 @@
>>> request = TestRequest(form={
... 'city.widgets.query': u'bologna'})
- >>> widget = setupWidget(field, location, request)
+ >>> widget = setupWidget(city, location, request)
Verify results:
@@ -135,7 +134,7 @@
... 'city.widgets.query': u'bologna',
... 'city': ('bologna',)})
- >>> widget = setupWidget(field, location, request)
+ >>> widget = setupWidget(city, location, request)
>>> 'checked="checked"' in widget()
True
@@ -154,11 +153,10 @@
... cities = ()
>>> route = Route()
- >>> field = cities.bind(route)
>>> from z3c.formwidget.query.widget import QuerySourceFieldCheckboxWidget
- >>> def setupWidget(field, context, request):
+ >>> def setupMultiWidget(field, context, request):
... widget = QuerySourceFieldCheckboxWidget(field, request)
... widget.name = field.__name__
... widget.context = context
@@ -168,7 +166,7 @@
An empty query is not carried out.
- >>> widget = setupWidget(field, route, request)
+ >>> widget = setupMultiWidget(cities, route, request)
>>> 'type="checkbox"' in widget()
False
@@ -176,7 +174,7 @@
>>> route.cities = (u"Palermo",)
- >>> widget = setupWidget(field, route, request)
+ >>> widget = setupMultiWidget(cities, route, request)
>>> 'type="checkbox"' in widget()
True
@@ -185,7 +183,7 @@
>>> request = TestRequest(form={
... 'cities.widgets.query': u'bologna'})
- >>> widget = setupWidget(field, route, request)
+ >>> widget = setupMultiWidget(cities, route, request)
Verify results:
@@ -201,7 +199,7 @@
... 'cities.widgets.query': u'bologna',
... 'cities': ('bologna',)})
- >>> widget = setupWidget(field, route, request)
+ >>> widget = setupMultiWidget(cities, route, request)
Verify that Bologna has been selected.
@@ -214,7 +212,7 @@
>>> request = TestRequest(form={
... 'cities': ()})
- >>> widget = setupWidget(field, route, request)
+ >>> widget = setupMultiWidget(cities, route, request)
We expect an unchecked box.
@@ -224,6 +222,51 @@
>>> 'checked="checked"' in widget()
False
+Named Sources
+-------------
+
+We can also provide a data source using named vocabularies. First we register
+our source as a named vocabulary::
+
+ >>> from zope.schema.interfaces import IVocabularyFactory
+ >>> from zope.schema.vocabulary import getVocabularyRegistry
+ >>> vr = getVocabularyRegistry()
+ >>> vr.register(u'test vocabulary name', ItalianCities)
+ >>> city2 = zope.schema.Choice(
+ ... __name__='city',
+ ... title=u'City',
+ ... description=u'Select a city.',
+ ... vocabulary=u'test vocabulary name')
+ >>> request = TestRequest(form={
+ ... 'city.widgets.query': u'bologna',
+ ... 'city': ('bologna',)})
+ >>> location = Location()
+ >>> widget = setupWidget(city2, location, request)
+ >>> 'Bologna' in widget()
+ True
+ >>> 'Palermo' in widget()
+ False
+
+The same is true of multi-select widgets::
+
+ >>> cities2 = zope.schema.Set(
+ ... __name__='cities',
+ ... title=u'Cities',
+ ... description=u'Select one or more cities.',
+ ... value_type=zope.schema.Choice(
+ ... vocabulary=u'test vocabulary name'
+ ... ))
+ >>> route = Route()
+ >>> request = TestRequest(form={
+ ... 'cities.widgets.query': u'bologna',
+ ... 'cities': ('bologna',)})
+ >>> widget = setupMultiWidget(cities2, route, request)
+ >>> 'Bologna' in widget()
+ True
+ >>> 'Palermo' in widget()
+ False
+
+
Todo
----
Modified: z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py
===================================================================
--- z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py 2008-10-12 15:30:30 UTC (rev 92085)
+++ z3c.formwidget.query/trunk/src/z3c/formwidget/query/widget.py 2008-10-12 16:08:24 UTC (rev 92086)
@@ -72,8 +72,10 @@
@property
def source(self):
- return self.field.source
-
+ """We need to bind the field to the context so that vocabularies
+ appear as sources"""
+ return self.field.bind(self.context).source
+
@property
def bound_source(self):
if self._bound_source is None:
@@ -179,7 +181,7 @@
@property
def source(self):
- return self.field.value_type.source
+ return self.field.bind(self.context).value_type.source
def updateQueryWidget(self):
z3c.form.browser.checkbox.CheckBoxWidget.update(self)
More information about the Checkins
mailing list