2015-02-26 5 views
2

У меня возникли проблемы с получением RelationList для отображения того, что я хочу в виджетах. Поведение, которое я видел, не имеет для меня никакого смысла: /mysite/folder1/foo - новый контент, где я хочу создать отношение /mysite/folder2/bar - элемент, к которому я хочу установить ссылку.Как получить RelationList для фильтрации с помощью object_provides?

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, и сам искать объект?

ответ

0

Я не уверен, что я делаю неправильно и раньше, но я получил следующие работы для простого выбора коробки (заказанного): из пяти импорта Grok из plone.directives импортировать форму из Products.CMFCore. Utils импорт getToolByName от импорта z3c.form.browser.orderedselect OrderedSelectFieldWidget из z3c.relationfield.schema импорта RelationChoice, отношений, 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), 
    ) 

 Смежные вопросы

  • Нет связанных вопросов^_^