Z3C.Forms Динамические источники провайдера возвращают пустой словарь в качестве объекта контекста

StackOverflow https://stackoverflow.com//questions/10658840

Вопрос

Я использую 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. .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top