Hi, Yes, one solution is custom widgets. Although I don't have a List of List example, I do have a List of Object example. It uses formlib, CustomWidgetFactory, ListSequenceWidget and ObjectWidget
http://zope3demos.googlecode.com/svn/tags/zope3demos-200610-21/otherdemos/objectsofobjects2/ Project at http://zope3demos.googlecode.com/ Kevin Smith ----- Original Message ---- From: Daniel M <[EMAIL PROTECTED]> To: [email protected] Sent: Friday, October 20, 2006 2:47:36 PM Subject: [Zope3-Users] Nested lists- "iteration over non-sequence" Hello, I'm new to Zope, and using Zope 3.3. I have managed to get a simple site running. I am having trouble getting the web interface to let me edit an object that contains a list, where the type of values in the list, is an interface that also holds a list. I can’t get this “list inside a list” setup to work correctly. In my example, I have a Person object that contains a list of PersonInfo objects, where each PersonInfo contains a list of names. When I enter the view for Person (based on EditForm), it displays an edit form as I would expect. However, when I try to add a PersonInfo to the list via the interface, an exception is raised: “TypeError: iteration over non-sequence” (The full traceback is over 6 pages long, so I won’t post it, but it does mention “sequencewidget” many times). I've tried some variations to narrow down the problem: *If I change PersonInfo to hold just a string instead of a list, it works! *If I change Person to hold just a single PersonInfo instead of a list, it works! * Therefore, it seems like my Zope site is set up OK, but for some reason Lists of objects with Lists raise an exception. Am I missing something? Maybe I have to write some custom widget to get around this? Is this possibly a known problem? The code: ********** People.py ***************** class IPersonInfo(interface.Interface): names = schema.List( title=u"names", unique=False, value_type=schema.TextLine(title=u'name') ) class IPerson(interface.Interface): ID = schema.TextLine( title=u'ID', description=u'Persons ID code') the_list = schema.List( title=u"PersonInfo list", unique=False, value_type=schema.Object(IPersonInfo)) class PersonInfo(persistent.Persistent): interface.implements(IPersonInfo) def __init__(self): self.names = persistent.list.PersistentList() def PersonInfoWidget(context,obj,request): return ObjectWidget(context, request, PersonInfo) class Person(persistent.Persistent): interface.implements(IPerson) ID = "1-2-3" def __init__(self): self.the_list = persistent.list.PersistentList() class AutoEditView(form.EditForm): form_fields = form.Fields(IPerson) class PersonInfoView(form.EditForm): form_fields = form.Fields(IPersonInfo) ********** end People.py ***************** configure.zcml doesn’t do anything unusual, it sets up the views to use my custom widgets and sets up the edit views and security. Regards and thanks for your help! -- Daniel M [EMAIL PROTECTED] -- http://www.fastmail.fm - Send your email first class _______________________________________________ Zope3-users mailing list [email protected] http://mail.zope.org/mailman/listinfo/zope3-users _______________________________________________ Zope3-users mailing list [email protected] http://mail.zope.org/mailman/listinfo/zope3-users
