给出了基于z3c.form https://github.com/collective/Products.UserAndGroupSelectionWidget/blob/z3cform-widget/src/Products/UserAndGroupSelectionWidget/z3cform/widget.py的小部件
我想在一些浏览器视图中访问它的设置和相应的字段。因为Widget不知道模式和字段,所以我对获取小部件和字段所需的信息很感兴趣。目前,我已经使用了字段名和上下文,这对于原型https://github.com/collective/Products.UserAndGroupSelectionWidget/blob/z3cform-widget/src/Products/UserAndGroupSelectionWidget/browser.py#L60来说似乎已经足够了。
编辑:,为了简化这个问题,我希望访问一个在z3c form及其小部件中定义的字段。除了传递请求和上下文以形成init,然后访问字段外,我找不到其他方法。有多适配器吗?
这样做的想法是有一个z3c.form小部件,人们可以将其连接到执行ajax调用的任何字段。ajax请求需要传递参数和响应,将查找小部件的使用地点和设置。问题是,如何查找z3c.form字段,需要哪些信息才能这样做?
发布于 2011-12-14 15:00:42
获取字段
如果可以获得架构,则可以获得字段。
对于灵巧的内容类型,如果您知道字段名和类型的portal_type,可以从该类型的工厂类型信息 (FTI)获取模式。
所以,如果我们知道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)获取Widget
来自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字段不一样)。获得小部件的最佳方法是您已经完成的操作,方法是手动调用FieldWidget.
因此,例如,如果您希望UserAndGroupSelectionWidget
widget = FieldWidget(field, UserAndGroupSelectionWidget(field, request))由于我也在集体中,并且使用了选择符小部件,所以我已经为您更新了代码;)
https://stackoverflow.com/questions/8476781
复制相似问题