我在使用RelationList显示我想要的小部件时遇到了一些麻烦。我见过的行为对我没有意义: / mysite / folder1 / foo - 新内容,我想创建一个关系 / mysite / folder2 / bar - 我要链接的项目。
source=ObjPathSourceBinder(object_provides='foo.bar.IMyInterface')
这似乎显示了所有Dexterity内容,无论界面如何 - 尽管只有提供IMyInterface的内容是可选择的。
source=ObjPathSourceBinder(navigation_tree_query={'object_provides':'foo.bar.IMyInterface'}))
我不明白为什么会导致不同的行为,但导致没有显示内容。它似乎是查询路径的问题,因为这确实有效:
source=ObjPathSourceBinder(navigation_tree_query={'path':{'query':'/mysite/folder2'},'object_provides':'foo.bar.IMyInterface'}))
然而,这并不理想,因为它需要了解路径。我期待这种行为只显示提供我的界面的文件夹内容和内容,只有提供我的界面的内容可供选择。这不可能吗?
我知道默认情况下不再支持关系 https://pypi.python.org/pypi/plone.app.dexterity#relation-support-no-longer-included-by-default(我正在使用plone.app.dexterity 1.2.1和Plone 4.2)
或者,一个简单的选择小部件就可以了,但我无法获得任何默认的z3c.form小部件来正常使用这个字段(它们渲染得很好,但是没有可选择的内容)。也许最好只使用带有词汇表的常规z3c架构列表,其中值是UID,并自己查找对象?
答案 0 :(得分:0)
我之前不确定我做错了什么,但是我得到了以下工作以获得一个简单的选择框(已订购): 从五个进口grok 来自plone.directives导入表单 来自Products.CMFCore.utils import getToolByName 从z3c.form.browser.orderedselect导入OrderedSelectFieldWidget 来自z3c.relationfield.schema import RelationChoice,Relation,RelationList 从zope.schema.interfaces导入IContextSourceBinder 来自zope.schema.vocabulary import SimpleVocabulary,SimpleTerm
@grok.provider(IContextSourceBinder)
def possibleVals(context):
catalog = getToolByName(context,'portal_catalog')
brains = catalog(object_provides='foo.bar.IMyInterface')
return SimpleVocabulary([SimpleTerm(value=b.getObject(),token=b.getPath(),title=b.Title) for b in brains])
...
form.widget(myfield=OrderedSelectFieldWidget)
myfield = RelationList(
title=_(u'My field'),
required=False,
value_type=RelationChoice(title=_(u'My field'),
source=possibleVals),
)