Plone 词汇表不适用于collective.z3cform.datagridfield';s的子对象架构,因为上下文没有_值

Plone 词汇表不适用于collective.z3cform.datagridfield';s的子对象架构,因为上下文没有_值,plone,z3c.form,Plone,Z3c.form,我正在研究一种使用datagridfield的内容类型。 在子对象中,我有一个带有自定义词汇表的选项字段 词汇表在datagrid之外工作(如果我直接在内容类型的模式中使用它)。但是当我将它添加到子对象时,它就不再工作了 查看调试说明,我看到词汇表的上下文没有值 有什么提示/指示可以让这一切顺利进行吗 这是不起作用的最简单模式(我认为): 现在我注册了菜单,Order as Dextrity content type,添加了一个菜单,并试图在其中添加一个订单,我在Order add view上遇

我正在研究一种使用datagridfield的内容类型。 在子对象中,我有一个带有自定义词汇表的选项字段

词汇表在datagrid之外工作(如果我直接在内容类型的模式中使用它)。但是当我将它添加到子对象时,它就不再工作了

查看调试说明,我看到词汇表的上下文没有值

有什么提示/指示可以让这一切顺利进行吗

这是不起作用的最简单模式(我认为):

现在我注册了菜单,Order as Dextrity content type,添加了一个菜单,并试图在其中添加一个订单,我在Order add view上遇到了一个错误,这是回溯:

Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module Products.PDBDebugMode.runcall, line 70, in pdb_runcall
  Module ZPublisher.Publish, line 46, in call_object
  Module plone.z3cform.layout, line 66, in __call__
  Module plone.z3cform.layout, line 50, in update
  Module plone.dexterity.browser.add, line 112, in update
  Module plone.z3cform.fieldsets.extensible, line 59, in update
  Module plone.z3cform.patch, line 30, in GroupForm_update
  Module z3c.form.group, line 128, in update
  Module z3c.form.form, line 134, in updateWidgets
  Module z3c.form.field, line 277, in update
  Module z3c.form.browser.multi, line 63, in update
  Module z3c.form.browser.widget, line 171, in update
  Module z3c.form.widget, line 477, in update
  Module collective.z3cform.datagridfield.datagridfield, line 107, in updateWidgets
  Module collective.z3cform.datagridfield.datagridfield, line 91, in getWidget
  Module z3c.form.browser.widget, line 171, in update
  Module z3c.form.object, line 217, in update
  Module z3c.form.object, line 208, in updateWidgets
  Module z3c.form.object, line 87, in update
  Module plone.z3cform.patch, line 21, in BaseForm_update
  Module z3c.form.form, line 150, in update
  Module z3c.form.form, line 134, in updateWidgets
  Module z3c.form.field, line 277, in update
  Module z3c.form.browser.select, line 51, in update
  Module z3c.form.browser.widget, line 171, in update
  Module z3c.form.widget, line 220, in update
  Module z3c.form.widget, line 214, in updateTerms
  Module zope.component._api, line 107, in getMultiAdapter
  Module zope.component._api, line 120, in queryMultiAdapter
  Module zope.component.registry, line 238, in queryMultiAdapter
  Module zope.interface.adapter, line 532, in queryMultiAdapter
  Module z3c.form.term, line 96, in ChoiceTerms
  Module zope.schema._field, line 349, in bind
  Module waga.game.core.content.interfaces, line 202, in getDishes
AttributeError: 'NO_VALUE' object has no attribute 'dishes'
> /home/quyetnd/Projects/waga.game.core/src/waga/game/core/content/interfaces.py(202)getDishes()
-> terms = [SimpleVocabulary.createTerm(dish, dish, dish) for dish in context.dishes]

上下文对象是一个实例。

这是
z3c.form
中的限制(至少在一些版本中,我认为它在较新的版本中已被修复)

我在vocab源函数中的难看解决方法:

 if not context:
      context = getSite()
      if not context:
           # Form is rendered from console without HTTP request traversing, etc.
           # and thread local site variable is not set
           raise RuntimeError("Oh snap. Beer time.")

 ...

请提供您的zope.schema和错误/调试跟踪,以便人们能够帮助您。我已经更新了一个简单的说明和跟踪。谢谢你的回答Mikko:)谢谢你的回答Mikko:)我这样做也是为了在我的词汇表中绕过这个问题。在Plone.app.z3cform中有一个Plone集成版的子表单适配器,它给了我们一些比NO_值更有趣的东西,但在我的例子中,它仍然不够智能(不是Plone的上下文)。需要注意的是,由于存在plone.app.z3cform,因此永远不会查找DatagridFieldSubform适配器。Zope获得了plone.app.z3cform版本,该版本目前不支持自动表单。我需要重新注册这家工厂,让它运转起来。
 if not context:
      context = getSite()
      if not context:
           # Form is rendered from console without HTTP request traversing, etc.
           # and thread local site variable is not set
           raise RuntimeError("Oh snap. Beer time.")

 ...