Я использую Plone 4.1.4, и я пытаюсь получить динамические источники для схемы.Чтобы работать, мне нужно заполнить список стран, который, в свою очередь, зависит от контекстного объекта.Поставщик динамических источников z3c.forms возвращает пустой словарь как объект контекста
Я использую этот пример: http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/vocabularies
Для 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 .__ вызова __ () и я исследую объект контекста, последний оказывается просто пустым словарем.
Когда я пытаюсь использовать именованный пример утилиты в упомянутой выше статье, и подобное происходит, контекст также {}.
Может ли кто-нибудь указать мне, что я могу делать неправильно?
UPDATE
ZCML для формы оболочки, которая вызывает форму является
<browser:page
name="view"
for="Products.oldproduct.MyFolderishClass"
class=".file.RegionClass"
permission="zope2.View"
/>
Где RegionClass наследует от формы оболочки, это может быть разрешение или проблема обхода?
Первоначально я думал, что это будет инициализировать и вызвать объект одновременно, но, похоже, это не так. Я просто попробовал это снова с тем же результатом - контекст по-прежнему является пустым словарем. Я подошел к стеку, чтобы определить ChoiceTerms (контекст, запрос, форму, поле, виджет) :, я получаю правильный объект запроса, но контекст пуст. Может быть проблема с ZCML slug (см. Мое обновление) –
имеет ли форма указатель '__parent__'? –
Да! Это объект, который должен быть контекстом. Как это произошло? –