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 = \ self.getTerms(cv.KeyActivitiesVocabularyFactory) self.widgets['key_activities'].update() 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 zope.schema.interfaces.I[List|Choice]. 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 validator.WidgetValidatorDiscriminators(NullListValidator, view=interfaces.IStep, field=ITCommonAddressData['key_activities']) 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. ..Carsten _______________________________________________ Zope3-users mailing list Zope3firstname.lastname@example.org http://mail.zope.org/mailman/listinfo/zope3-users