我有一个灵巧的行为,允许我关联项目并将关系存储为 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
在处理请求参数时使用了一个集合。大概这是为了防止重复但有两个讨厌的副作用:
- 字段的值在未更改时会更新
- 当它可能很重要时,订单丢失了
是否有替代方法以MultiContentTreeFieldWidget
类似的方式工作但保留您添加项目的顺序?更好的是,是否有一个小部件可以做到这一点并且还允许您重新排序项目?