Plone 如何获取要按对象过滤的关系列表?

Plone 如何获取要按对象过滤的关系列表?,plone,dexterity,z3c.form,Plone,Dexterity,Z3c.form,我在获取RelationList以在小部件中显示所需内容时遇到一些问题。我所看到的行为对我来说毫无意义: /mysite/folder1/foo-新内容,我想在其中创建关系 /mysite/folder2/bar-我想链接到的项目 source=ObjPathSourceBinder(object_provides='foo.bar.IMyInterface') 这似乎显示了所有灵巧的内容,不管界面如何——尽管只有提供IMyInterface的内容是可选的 source=ObjPathSour

我在获取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'}))
然而,这并不理想,因为它需要知道路径。我希望该行为只显示folderish内容和提供我的界面的内容,而只显示提供我的界面的内容。这不可能吗

我知道默认情况下不再支持关系 (我正在使用plone.app.dextrity 1.2.1和plone 4.2)


或者,一个简单的select小部件也可以,但是我无法让任何默认的z3c.form小部件正确地处理这个字段(它们呈现的很好,但是没有可选择的内容)。也许最好只使用一个常规的z3c模式列表和一个词汇表,其中值是UID,然后自己查找对象?

我不确定我以前做错了什么,但我得到了以下用于简单选择框(有序)的方法: 来自五个进口国 从plone.directions导入表单 从Products.CMFCore.utils导入getToolByName 从z3c.form.browser.orderedselect导入OrderedSelectFieldWidget 从z3c.relationfield.schema导入RelationChoice、Relation、RelationList 从zope.schema.interfaces导入IContextSourceBinder 从zope.schema.vocabulary导入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),
    )