アイテムを関連付け、その関係をUUIDとして保存できる器用さの動作があります
relatedItems = schema.List(
title=u"Related Items",
description=u"Search for content that is related to this item",
required=False,
value_type=schema.Choice(
source=UUIDSourceBinder(navigation_tree_query={'portal_type':
TYPES_WITH_TEASERS})))
form.widget(relatedItems='plone.formwidget.contenttree.widget.MultiContentTreeFieldWidget')
これは、いくつかのリレーションがある場合、アイテムを編集するたびに順序が変わることを除いて、うまく機能します。ページの右側の列に関連アイテムを表示しており(たとえば、食品に関するこの記事を参照)、より興味深いティーザーを最初に配置できるように順序を制御したいと考えています。
デバッグでは、この並べ替えは、z3c.formwidget.query.widget.QuerySourceRadioWidget.update
リクエストパラメータを処理するときにセットを使用するという事実に起因している可能性があります。おそらくこれは重複を防ぐためですが、2つの厄介な副作用があります。
- フィールドの値は、変更されていないときに更新されます
- 重要な場合は順序が失われます
MultiContentTreeFieldWidget
同様に機能するが、アイテムを追加する順序を保持する代替手段はありますか?さらに良いのは、これを実行し、アイテムを並べ替えることもできるウィジェットがありますか?