2

我在获取 RelationList 以在小部件中显示我想要的内容时遇到了一些麻烦。我看到的行为对我没有意义: /mysite/folder1/foo - 新内容,我想在其中创建关系 /mysite/folder2/bar - 我想链接到的项目。

source=ObjPathSourceBinder(object_provides='foo.bar.IMyInterface')

无论界面如何,这似乎都会显示所有敏捷内容 - 尽管只有提供 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 的词汇表,然后自己查找对象?

4

1 回答 1

0

我不确定我之前做错了什么,但我得到了以下内容用于一个简单的选择框(有序):从五个 import grok from plone.directives import form from Products.CMFCore.utils import getToolByName from z3c.form .browser.orderedselect 从 z3c.relationfield.schema 导入 OrderedSelectFieldWidget 从 zope.schema.interfaces 导入 RelationChoice、Relation、RelationList 从 zope.schema.vocabulary 导入 IContextSourceBinder 导入 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),
    )
于 2015-02-27T20:14:54.787 回答