我有一些带有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。
我倾向于认为这只是一个错误,但也许有人在报告之前发现了我遗漏的东西。
答案 0 :(得分:2)
是的,这是一个错误(Plone 4.3.3):dev.plone.org/ticket/14027和github.com/zopefoundation/z3c.form/issues/17 - 在您的buildout配置中将z3c.form固定为3.0.5(此解决方法适用于我):
[versions]
z3c.form = 3.0.5