Hola Mikel,
Lo que me propones son los named vocabularies, ya los conocía, los uso
amenudo. Pero en el caso que me ocupa ahora el problema es que es un widget
de tipo "MultiWidget" y parece ser que cuando el sistema crea el
vocabulary, bien sea desde un IContextSourceBinder o un IVocabularyFactory,
al final lo que tiene que producir es un SimpleVocabulary (he estado
siguiendo el código), el context que le pasa es None. Por lo tanto
cualquier necesidad de tener el context para la generación del
SimpleVocabulary acaba en error.
He llegado a resolver parcialmente el problema y lo menciono por aquí por
si alguien lo necesita o quiere indagar algo más. Yo por el momento lo dejo
(abandono) tal cual ya que prefiero seguir avanzando en el proyecto que me
ocupa y luego tal vez más adelante vuelva a abordarlo.
La solución pasa por crear unos formularios personalizados para añadir el
objeto dexterity y para editarlo, en lugar de los autoform.
PossibleOptionsVocabulary implementa la interfaz IVocabularyFactory, pero
podría ser una función que generase el SimpleVocabulary deseado y listo:
*class AddForm(dexterity.AddForm):*
* grok.name <http://grok.name>('your.content')*
* def updateWidgets(self):*
* super(AddForm, self).updateWidgets()*
* if self.widgets:*
* self.widgets['price'].field.key_type.vocabulary = \*
* PossibleOptionsVocabulary()(self.context)*
* self.widgets.update()*
*class EditForm(dexterity.EditForm):*
* grok.context(IOption)*
* def updateWidgets(self):*
* super(EditForm, self).updateWidgets()*
* self.widgets['price'].field.key_type.vocabulary = \*
* PossibleOptionsVocabulary()(self.context)*
* self.widgets.update()*
OJO, que esto no me ha funcionado del todo bien, así que no lo toméis como
solución, parece ser que hay algún problema al visualizar luego el widget.
--
Juan Carlos Coruña: Python, Zope, Plone, Navision.
2014-03-06 13:26 GMT+01:00 Mikel Larreategi [via Usarios Plone] <
[email protected]>:
> 2014-03-06 13:18 GMT+01:00 oggers <[hidden
> email]<http://user/SendEmail.jtp?type=node&node=7572683&i=0>
> >:
>
> Donde necesito tener el context o el parent es dentro de PossibleOptions,
>> y ahí self.context no existe y la variable context que se le pasa al metodo
>> __call__ es None, getSite funcionaría, pero me devolvería la raíz del sitio
>> y yo necesito el padre del objeto que estoy editando.
>>
>
>
> La solución que hemos usado nosotros para esto (dado que no se puede
> acceder al contexto desde ahí), es definir un vocabulario donde
> corresponda, y después usar la opción 'vocabulary' del esquema:
>
> Por ejemplo:
>
>
> https://github.com/codesyntax/cs.publiccontracts/blob/master/cs/publiccontracts/contractsfolder.py#L185
>
> Y luego usar eso:
>
>
> https://github.com/codesyntax/cs.publiccontracts/blob/master/cs/publiccontracts/contract.py#L42
>
> No es lo mismo que un ObjectSourceBinder, pero igual te puede servir.
>
>
> Mikel
>
>
> --
> Mikel Larreategi
> [hidden email] <http://user/SendEmail.jtp?type=node&node=7572683&i=1>
>
>
> CodeSyntax
> Azitaingo Industrialdea 3 K
> E-20600 Eibar
> Tel: (+34) 943 82 17 80
>
> _______________________________________________
> Usuarios-Plone mailing list
> [hidden email] <http://user/SendEmail.jtp?type=node&node=7572683&i=2>
> https://lists.plone.org/mailman/listinfo/plone-usuarios-plone
>
>
> ------------------------------
> If you reply to this email, your message will be added to the discussion
> below:
>
> http://usarios-plone.2295514.n2.nabble.com/context-es-None-en-un-vocabulario-para-schema-Dict-tp7572678p7572683.html
> To unsubscribe from context es None en un vocabulario para schema.Dict, click
> here<http://usarios-plone.2295514.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=7572678&code=b2dnZXJzQGdtYWlsLmNvbXw3NTcyNjc4fC0xNDk3NjQyODYw>
> .
> NAML<http://usarios-plone.2295514.n2.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>
--
View this message in context:
http://usarios-plone.2295514.n2.nabble.com/context-es-None-en-un-vocabulario-para-schema-Dict-tp7572678p7572685.html
Sent from the Usarios Plone mailing list archive at Nabble.com._______________________________________________
Usuarios-Plone mailing list
[email protected]
https://lists.plone.org/mailman/listinfo/plone-usuarios-plone