I use a session-based wizard with plone.z3cform that uses the concept 
from z3c.formdemo's wizard. The content is kept inside a session until 
it is written into the db in .finish().

I have problems with Lists and Choices where the vocabulary needs a 
suitable context that the content from the session doesn't provide.

By default my Vocabularyfactory fails to get it's data and returns a 
empty SimpleVocabulary. The widget is empty.
I can fill the widget with my terms like that:

     def getTerms(self, factory):
         terms = term.Terms()
         terms.terms =  factory(self.parentForm.context)
         return terms

     def updateWidgets(self):
         super(FachgebieteSchritt, self).updateWidgets()
         self.widgets['key_activities'].terms = \

But saving the selected values fails. validator.SimpleFieldValidator 
calls the field's _validate()-Method with the wrong context (the 
content) and WrongContainedType is raised.

My actual solution is to register a NullValidator for wizard.IStep and 

Is there a more elegant way, e.g. where updateTerms and 
SimpleFieldValidator.validate() can use the right context?

A second, small problem is that I tried to use the Discriminator like 
the Doctest describes


and thought the getSpecification-magic registers for the right 
Interface, but maybe I missunderstood the test. Registering an adapter 
by hand for zope.schema.interfaces.IList works.


Zope3-users mailing list

Reply via email to