如何从浏览器视图访问z3c.form小部件设置

时间:2011-12-12 15:36:09

标签: plone dexterity z3c.form

根据z3c.form https://github.com/collective/Products.UserAndGroupSelectionWidget/blob/z3cform-widget/src/Products/UserAndGroupSelectionWidget/z3cform/widget.py

给出以下小部件

我想在一些browserview中访问其设置和相应的字段。由于Widget不了解架构和字段,我对获取窗口小部件和字段需要哪些信息感兴趣。目前我已经提供了fieldname和context,这对于archtypes https://github.com/collective/Products.UserAndGroupSelectionWidget/blob/z3cform-widget/src/Products/UserAndGroupSelectionWidget/browser.py#L60

来说似乎已经足够了

编辑为了简化问题,我想访问某些 z3c格式及其小部件中定义的字段。除了传递请求和上下文以形成init然后访问该字段之外,我找不到其他方法。有多功能适应器吗?

我们的想法是拥有一个z3c.form小部件,人们可以将其挂钩到执行ajax调用的任何字段。 ajax请求需要传递参数和响应将查找使用窗口小部件的位置以及使用什么设置。问题是,如何查找z3c.form字段以及需要哪些信息

1 个答案:

答案 0 :(得分:5)

获取字段

如果您可以获得架构,则可以获得该字段。

对于敏捷内容类型,如果您知道字段名称和类型的portal_type,则可以从类型的工厂类型信息 FTI )中获取架构。< / p>

因此,如果我们知道 portal_type field_name

from zope.component import getUtility
from plone.dexterity.interfaces import IDexterityFTI
fti = getUtility(IDexterityFTI, name=portal_type)
schema = fti.lookupSchema()
field = schema.get(field_name)

获取小工具

来自z3c.form文档:http://packages.python.org/z3c.form/widget.html

小部件是一个多功能设备,所以如果你有这个字段,你可以这样做:

ageWidget = zope.component.getMultiAdapter((field, request),
    interfaces.IFieldWidget)

重要说明:如果您已通过 plone.autoform 指定了小部件,则不会获取该小部件。 plone.autoform z3c.form.field.Field 对象上手动设置 widgetFactory (与 zope不同.schema Field!)。然后,通过手动调用启动 FieldWidget ,您可以获得小部件的最佳方式。

例如,如果你想要 UserAndGroupSelectionWidget

widget = FieldWidget(field, UserAndGroupSelectionWidget(field, request))

P.S由于我也是集体并使用选择器小部件,我已经为你更新了代码;)