3

2 つの器用さタイプを作成しました: lab_equipment.py、class_activity.py。class_activity タイプには、lab_activity タイプとの次の関係が含まれています。

class_activity.py:

class IClassActivity(form.Schema, IImageScaleTraversable):
[...]
    dexteritytextindexer.searchable('apparatus')
    apparatus = RelationList(
        title=_(u"Apparatus"),
        description=_(u"Choose equipment used in this activity"),
        value_type=RelationChoice(
            source=ObjPathSourceBinder(
                object_provides=ILabEquipment.__identifier__,
                navigation_tree_query= {'path': {'query':'/Plone/ug-demos/equipment'}},
            ),
        ),
    )

[...]

ここで、lab_equipment ページ テンプレートの class_activity タイプから関連メンバーをリストする必要があります。

RelationList を class_activity タイプから lab_activity タイプに逆参照し、このリストをページ テンプレートに表示する方法はありますか?

4

1 に答える 1

3

後方参照 (指定された属性を使用して特定のオブジェクトを指すすべてのオブジェクト) を取得するには、単に from_object または from_path を使用することはできません。これは、ソース オブジェクトが取得ラッパーなしでリレーションに格納されているためです。IntId カタログ内のオブジェクトを検索する from_id およびヘルパー メソッドを使用する必要があります。

from Acquisition import aq_inner
from zope.component import getUtility
from zope.intid.interfaces import IIntIds
from zope.security import checkPermission
from zc.relation.interfaces import ICatalog


def back_references(source_object, attribute_name):
    """ Return back references from source object on specified attribute_name """
    catalog = getUtility(ICatalog)
    intids = getUtility(IIntIds)
    result = []
    for rel in catalog.findRelations(
                            dict(to_id=intids.getId(aq_inner(source_object)),
                                 from_attribute=attribute_name)
                            ):
        obj = intids.queryObject(rel.from_id)
        if obj is not None and checkPermission('zope2.View', obj):
            result.append(obj)
    return result

この方法では、発効日と有効期限、またはコンテンツの言語はチェックされないことに注意してください。

あなたの場合、ラボ機器ブラウザビューのメソッドからこのメソッドを呼び出し、後方参照オブジェクトのリストをテンプレートに渡す必要があります。例えば:

class LabEquipmentView(BrowserView):

    def aparatus_backrefs(self):
        return back_references(self.context, 'apparatus')

PS私は自分の器用さの問題#234から答えをコピーしました。 20マイルストーン%20所有者%20要約

于 2012-04-27T06:00:26.687 に答える