Z3C.Forms Динамические источники провайдера возвращают пустой словарь в качестве объекта контекста
Вопрос
Я использую Plone 4.1.4, и я пытаюсь получить динамические источники для Schema.Choice на работу, мне нужно заполнить список страновых, которые, в свою очередь, зависит от объекта контекста.
Я использую этот пример: http://plone.org/products/dexterity/documentation/manual / Разработчик-ручной / продвинутый / словарь
Для Icontextsourcebinder, пример, пустой словарь вместо фактического объекта контекста возвращается:
from zope import interface
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from zope.schema.interfaces import IContextSourceBinder
import zope.schema
from z3c.form import form
class CountryGenerator(object):
interface.implements(IContextSourceBinder)
def __call__(self, context):
#context is == {}
import pdb; pdb.set_trace()
return SimpleVocabulary([
SimpleTerm(value="not_selected", title=_("Country Not Selected"))
])
class IStep(interface.Interface):
region = schema.Choice(title=_("Select your country"),
required=True,
source=CountryGenerator,
default="not_selected")
class Step(form.Form):
fields = field.Fields(IStep)
label = _("Step")
description = _("Select your country")
.
Когда точка отладки попадает внутрь CountryGenerator .__ Call __ () метод и я изучаю объект контекста, последний оказывается просто пустой словарь.
Когда я пытаюсь использовать пример с именованным утилитом в статье, упомянутой выше, и похожее, что происходит контекст также {}.
может кто-нибудь указать мне то, что я мог бы сделать неправильно?
<Сильное> Обновление
zcml для обертки формы, которые вызывают форму
<browser:page
name="view"
for="Products.oldproduct.MyFolderishClass"
class=".file.RegionClass"
permission="zope2.View"
/>
.
Там, где регионаркласс наследует от обертки формы, может ли это быть разрешенным или прохождением?
Решение
Потому что ваш источник - это класс, вам нужно создать это:
class IStep(interface.Interface):
region = schema.Choice(title=_("Select your country"),
required=True,
source=CountryGenerator(),
default="not_selected")
.
При определенных обстоятельствах, таких как с использованием Sub Forms или сложных виджетов формы (виджет в виджете для выбора списка, и т. Д.), необходимо следить за указателями __parent__
в соответствующий внешний контекст для возврата к контексту Plone. .