z3c.formas dinâmicas de fontes de provedor retorna vazia dicionário como um objeto de contexto

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

Pergunta

Eu estou usando o Plone 4.1.4 e eu estou tentando chegar a dinâmica de fontes para um esquema.Escolha a trabalhar, eu preciso preencher a lista de país que, por sua vez, depende do contexto de objeto.

Eu estou usando este exemplo:http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/vocabularies

Para IContextSourceBinder, exemplo, um dicionário vazio em vez do atual contexto do objeto é retornado:

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")

Quando a depuração ponto é atingido dentro de CountryGenerator.__chamada__() método e eu examinar o objeto de contexto, estes últimos acabam por ser apenas um vazio dicionário.

Quando eu tento usar o nome do utilitário de exemplo no artigo mencionado acima, e a mesma coisa acontece, contexto, há também {}.

Alguém poderia me apontar para o que eu poderia estar fazendo de errado?

ATUALIZAÇÃO

ZCML para o formulário de wrapper que chama o formulário é

<browser:page
  name="view"
  for="Products.oldproduct.MyFolderishClass"
  class=".file.RegionClass"
  permission="zope2.View"
  />

Onde RegionClass herda de Forma wrapper, poderia ser de permissão ou transversal problema?

Foi útil?

Solução

Devido a sua origem é de uma classe, você precisa criar uma instância:

class IStep(interface.Interface):
    region = schema.Choice(title=_("Select your country"),
                        required=True,
                        source=CountryGenerator(),
                        default="not_selected")

Em determinadas circunstâncias, como com o uso de sub formas complexas ou formulário de widgets (widget dentro de um widget para a lista de seleções, etc), você precisa seguir o __parent__ ponteiros para o exterior contexto para voltar para o Plone contexto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top