[Zope3-Users] z3c.form: terms/validation and problems with context
Carsten Senger
senger at rehfisch.de
Tue Aug 19 14:52:53 EDT 2008
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
More information about the Zope3-users
mailing list