Получение поля
Если вы можете получить схему, вы можете получить поле.
Для типа содержимого ловкости, если вам известно имя поля и тип_порталя типа, вы можете получить схему из типа Информация о типе фабрики ( 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)
Получение виджета
Из документации z3c.form: http://packages.python.org/z3c.form/widget.html
Виджет является мультиадаптером, поэтому, если у вас есть поле, вы можете получить его так:
ageWidget = zope.component.getMultiAdapter((field, request),
interfaces.IFieldWidget)
Важно: Если вы указали виджет через plone.autoform , тогда этот виджет не будет выбран. plone.autoform вручную устанавливает widgetFactory для объекта z3c.form.field.Field (который не совпадает с zope.schema Поле!). Тогда лучший способ получить виджет - это то, что вы уже сделали, вручную вызвав FieldWidget .
Например, если вам нужен UserAndGroupSelectionWidget :
widget = FieldWidget(field, UserAndGroupSelectionWidget(field, request))
P.S Так как я тоже в коллективе и использую виджет выбора, я обновил код для вас ;)