如果不需要自定义敏捷类型中的RelationChoice字段,则表单上的LookupError呈现

时间:2015-02-24 10:09:18

标签: plone dexterity

我有一些带有RelationChoice字段的自定义敏捷类型。一切正常,但如果我将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)

在我看来,模板引擎可能会尝试渲染字段的当前值,假设它属于指定的词汇表,但它不会因为没有给定值(但即使对于那些元素也不会已经有了选择的关系!)。在编辑我的自定义类的现有元素以及尝试添加新元素时,这种情况发生在我身上。

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

我正在使用Plone 4.3,Dexterity 2.0.11,Relation Field 1.2.1和Content tree widget 1.0.7。

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

1 个答案:

答案 0 :(得分:2)

是的,这是一个错误(Plone 4.3.3):dev.plone.org/ticket/14027github.com/zopefoundation/z3c.form/issues/17 - 在您的buildout配置中将z3c.form固定为3.0.5(此解决方法适用于我):

[versions]
z3c.form = 3.0.5