Hi, On Sat, Apr 15, 2006 at 08:41:57AM -0700, Ruben Gutierrez wrote: > I'm having trouble understanding some of the semantics or conventions with > Zope. One simple question I have is how do I create a list of selectable > values in a form. I understand you can use a Choice object, but I would like > to populate the list with all available objects of a specific type, within a > specific container. For example, I have a form which requests an address. > How do I populate the State (e.g., CA, HI, NY) field from a list of stored > State objects? I don't want to include all states, as some may not be > relevant (maybe the form is region-specific). But, I also don't want to > statically list the states in a Choice declaration, either.
Sounds like a classic use case for a vocabulary. Not tested: *configure.zcml* [...] <utility name="States" factory="vocabularies.StatesFactory" provides="zope.app.schema.interfaces.IVocabularyFactory" /> [...] *vocabularies.py* from zope.interface import implements from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm from zope.app.schema.interfaces import IVocabularyFactory class StatesFactory(): implements(IVocabularyFactory) def __call__(self,context): terms=[SimpleTerm(name,title=name) for name in context.keys()] voc=SimpleVocabulary(terms) return voc The vocabulary factory makes use of the provided context object (which is the current content object when editing a form. Just use the vocabulary in a choice field: *interfaces.py* [...] class IMyObject(Interface): choice=Choice( title=u'States', vocabulary='States' required=True ) [...] Regards, Frank _______________________________________________ Zope3-users mailing list Zope3email@example.com http://mail.zope.org/mailman/listinfo/zope3-users