Hermann Himmelbauer wrote:
> As already mentioned before, I use interfaces that contain lists of other
> interfaces via the following syntax:
> emails = List(value_type=Object(schema=IEmail))
> In my formlib-based class, I have use the following, so that the widgets are
> displayed correctly:
> email_widget = CustomWidgetFactory(ObjectWidget,Email)
> emails_widget = CustomWidgetFactory(ListSequenceWidget,
> and in the form.Form based class:
> form_fields['emails'].custom_widget = emails_widget
> The widgets are displayed perfectly, but when I try to update the data, the
> validation fails with the following error:
> "Wrong contained type"
> I don't know how to get around this, especially I don't find a good entry
> point to this problem - it seems that this error comes from the
> widget.getInputValue() function - is that true?
> All objects in my example are of the type Interface, perhaps I have to define
> them as containers?
> Another thing I don't know is how I can omit fields from the email_widget, is
> there a simple solution?
> Best Regards,
Curiously I seem to have run into a similar problem to Hermann's at
about the same time...
I too am using a Custom ObjectWidget in a ListSequenceWidget:
viewassociation_widget = CustomWidgetFactory(ObjectWidget, ViewAssociation)
elements_widget = CustomWidgetFactory(ListSequenceWidget,
and placing it into my formlib.EditForm :
form_fields['elements'].custom_widget = elements_widget
The fields in the ObjectWidget are drawn from IViewAssociation :
"""Stores information about an editor's choice of view
for an item within a section
viewtype = Choice(
description=_(u"A type for the view"),
required = True,
values = [u'insert', u'thumbnail', u'link']
item = Choice(
description=_(u"The item providing data for this view element"),
required = True,
vocabulary = u'Clipboard',
section = Attribute(u'The Section Object using this Association')
The form renders correctly, which is nice, but only validates and
creates and add the ViewAssociation objects if I knock out the 'item' field.
When I include the 'item' field in the schema validation fails with
"Wrong contained type". Here's the current simplified testing version of
the "Clipboard" vocabulary.
session = z3c.zalchemy.getSession
def __call__(self, context):
items = [x for x in session().query(ArchiveObject).select()]
voc = SimpleVocabulary.fromValues(items)
ViewAssociation objects can accept ArchiveObjects in their item
attribute in my unit tests...
To (spookily) increase the similarity of my case to Hermann's I too
would like to control the subwidgets in the Custom ObjectWidget - in my
case by using a RadioWidget for the viewtype field - but I can't quite
work out how.
viewassociation_widget = CustomWidgetFactory(ObjectWidget,
TypeError: Unable to configure a widget for viewtype - attribute
viewtype_widget does not implement IWidget
Thanks for fighting through this overlong post.
Can anyone help?
Zope3-users mailing list