Vinny wrote:
In a ZPT I would do something like:

for field in fieldsInObject(row) # which has (ordered?) fields
  th cell:
for row in rowView
  for field in fieldsInObject(row) # which has (ordered?) fields
    td cell: field.value

I know the above is broken in several ways.  I've been
trying various methods all evening.  The closest I get
is the __dict__ usage. Ideally, I would get the interface provided by the object and feed that to form.Fields() but I can't determine how to get an
interface value that can be fed to form.Fields().

iface = zope.interface.providedBy(obj)

doesn't seem to work.

By itself it won't work. You'll have to do a bit more. First of all, an object can provide 0, 1 or more interfaces. Second, schemas are just interfaces whose specifications are fields (a schema can also have method specifications, there's no restriction to "mixing" a traditional interface with a schema). Therefore:

  for iface in zope.interface.providedBy(obj):
      for name in iface:
          field = iface[name]
          if zope.schema.interfaces.IField.providedBy(field):
              # you've got a schema field, now you can work with
              # field.title, field.description, etc. (see IField)

-- -- Professional Zope documentation and training
Next Zope 3 training at Camp5:

Zope3-users mailing list

Reply via email to