如果不需要自定义 Dexterity 类型中的 RelationChoice 字段,则在表单呈现时出现 LookupError

LookupError on form render if RelationChoice field in custom Dexterity type is not required

我有一些带有 RelationChoice 字段的自定义 Dexterity 类型。一切正常,除了如果我将 RelationChoice 字段的 required 属性 设置为 False,我在尝试显示编辑表单时出现错误。

这是其中一种自定义类型的样子:

class ISceneFolder(model.Schema):
    """
    Container for Scene type items
    """

    rootScene = RelationChoice(
        title=_(u"Root Scene"),
        description=_(u"Scene that will be shown first on entering the app"),
        source=ObjPathSourceBinder(object_provides=IScene.__identifier__),
        required=False,
    )

堆栈跟踪的最后一部分(相当长)如下所示:

  Module zope.tales.tales, line 696, in evaluate
   - URL: /Users/joan/projects/ecorail/cms/eggs/z3c.form-3.1.1-py2.7.egg/z3c/form/browser/radio_input.pt
   - Line 8, Column 4
   - Expression: <PythonExpr (view.renderForValue(item['value']))>
   - Names:
      {'args': (),
       'context': <SceneFolder at /cms/dev-workspace/dummy-map/scenes>,
       'default': <object object at 0x1065dabc0>,
       'loop': {},
       'nothing': None,
       'options': {},
       'repeat': {},
       'request': <HTTPRequest, URL=http://localhost:8080/cms/dev-workspace/dummy-map/scenes/@@edit>,
       'template': <zope.browserpage.viewpagetemplatefile.ViewPageTemplateFile object at 0x10a2a6790>,
       'view': <ContentTreeWidget 'form.widgets.rootScene'>,
       'views': <zope.browserpage.viewpagetemplatefile.ViewMapper object at 0x10b24dc50>}
  Module zope.tales.pythonexpr, line 59, in __call__
   - __traceback_info__: (view.renderForValue(item['value']))
  Module <string>, line 1, in <module>
  Module z3c.form.browser.radio, line 44, in renderForValue
  Module z3c.form.term, line 38, in getTermByToken
  Module zope.schema.vocabulary, line 133, in getTermByToken
LookupError: --NOVALUE--
> /Users/joan/projects/ecorail/cms/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/vocabulary.py(133)getTermByToken()
-> raise LookupError(token)

在我看来,模板引擎可能正在尝试呈现字段的当前值,假设它属于指定的词汇表,但它不是因为没有给定值(但即使对于已经具有选定关系的元素!)。在编辑我的自定义元素 class 以及尝试添加新元素时,我会遇到这种情况。

具有讽刺意味的是,Dexterity 开发人员手册中的 RelationChoice 和 RelationList 示例显示 required 属性设置为 False,而 RelationChoice 的示例与我的自定义字段非常相似:http://docs.plone.org/external/plone.app.dexterity/docs/advanced/references.html

我正在使用 Plone 4.3、Dexterity 2.0.11、关系字段 1.2.1 和内容树小部件 1.0.7。

我倾向于认为这只是一个错误,但也许有人在我报告之前发现了我遗漏的东西。

是的,它是一个错误(Plone 4.3.3):dev.plone.org/ticket/14027 and github.com/zopefoundation/z3c.form/issues/17 - 在您的构建配置中将 z3c.form 固定到 3.0.5(此解决方法对我有用):

[versions]
z3c.form = 3.0.5