Question

I have a form model created as following:

from plone.app.directives import Form

class IFormSchema(form.Schema):

    foobar = schema.Bool(title=u"Just another field")

I'd like to register an adapter against this definition:

@component.adapter(IFormSchema)
@interface.implementer(ITreeSelectURLProvider)
def TreeSourceURL():
    """
    """
    return "http://foobar"

The registration goes correctly.

However, there is an issue that I don't know if IFormSchema is directly provided by any object in any point of z3c.form processing chain, so that I could call:

 provider = ITreeSelectURLProvider(someObject)
  • Does IFormSchema get directly applied to some object (zope.interface.directlyProvides?) in any point of z3c.form or plone.autoform chain

  • If not, what is the recommended practice so that I can register adapters against the model? What classes I should make to implement this interface?

To make matters worse, the context in the question is not a real content item but a subform object.

Was it helpful?

Solution

Dexterity make sure that the schema interface (be that defined on the filesystem and referenced in the FTI, or defined through the web or in an XML file) is provided by instances of the content type.

This isn't really about forms, it's about Dexterity. The form.Schema base class is just a marker that extends Interface, and which allows some of plone.autoform's processing to take place at configuration time.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top