Hermann Himmelbauer wrote: > Hi, > 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, > subwidget=email_widget) > > 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, > Hermann >
Hi Guys, 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, subwidget=viewassociation_widget) and placing it into my formlib.EditForm : form_fields['elements'].custom_widget = elements_widget The fields in the ObjectWidget are drawn from IViewAssociation : class IViewAssociation(Interface): """Stores information about an editor's choice of view for an item within a section """ viewtype = Choice( title=_(u"View Type"), description=_(u"A type for the view"), required = True, values = [u'insert', u'thumbnail', u'link'] ) item = Choice( title=_(u"Content Item"), 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 class ClipboardVocabFactory(object): implements(IVocabularyFactory) def __call__(self, context): items = [x for x in session().query(ArchiveObject).select()] voc = SimpleVocabulary.fromValues(items) return voc 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, ViewAssociation, viewtype_widget=RadioWidget) raises: 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? Rupert _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users