Plone 如果自定义灵巧度类型中的RelationChoice字段不是必需的,则窗体呈现上的LookupError

Plone 如果自定义灵巧度类型中的RelationChoice字段不是必需的,则窗体呈现上的LookupError,plone,dexterity,Plone,Dexterity,我有一些带有RelationChoice字段的自定义灵巧类型。一切正常,但如果我将RelationChoice字段的required属性设置为False,则在尝试显示编辑表单时会出错 以下是其中一种自定义类型的外观: class ISceneFolder(model.Schema): """ Container for Scene type items """ rootScene = RelationChoice( title=_(u"Root

我有一些带有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)
模块zope.tales.tales,第696行,在评估中
-URL:/Users/joan/projects/ecorail/cms/eggs/z3c.form-3.1.1-py2.7.egg/z3c/form/browser/radio_input.pt
-第8行第4栏
-表达方式:
-姓名:
{'args':(),
“上下文”:,
“默认值”:,
'循环':{},
“没有”:没有,
“选项”:{},
'重复':{},
“请求”:,
“模板”:,
“视图”:,
“视图”:
模块zope.tales.pythonexpr,第59行,呼叫__
-_uuu回溯_uu信息uuuuu:(view.renderForValue(item['value']))
模块,第1行,输入
renderForValue中模块z3c.form.browser.radio第44行
getTermByToken中模块z3c.form.term第38行
getTermByToken中的模块zope.schema.词汇,第133行
Lookuperor:--诺瓦卢--
>/Users/joan/projects/ecorail/cms/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/词汇表.py(133)getTermByToken()
->提升LookupError(令牌)
在我看来,模板引擎可能试图呈现字段的当前值,假设它属于指定的词汇表,但事实并非如此,因为没有给定值(但即使对于已经具有选定关系的元素也是如此!)。在编辑自定义类的现有元素以及尝试添加新元素时,都会发生这种情况

具有讽刺意味的是,《Dextrity Developer手册》中的RelationChoice和RelationList示例显示了
required
属性设置为
False
,RelationChoice示例与我的自定义字段非常相似:

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

我倾向于认为这只是一个bug,但在我报告它之前,可能有人发现了我缺少的东西。

是的,这是一个bug(Plone 4.3.3):并且-在构建配置中将z3c.form固定到3.0.5(这个变通方法对我有效):


是的,这是一个bug(Plone 4.3.3):并且-如果可能的话,请锁定到z3c.form 3.0.5(这个变通方法适合我)谢谢!这个版本也对我有用。我想你可以把这个写下来作为答案,这样我就可以把它标记为解决方案,如果你愿意的话
[versions]
z3c.form = 3.0.5