3

我有一个灵巧的行为,允许我关联项目并将关系存储为 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在处理请求参数时使用了一个集合。大概这是为了防止重复但有两个讨厌的副作用:

  1. 字段的值在未更改时会更新
  2. 当它可能很重要时,订单丢失了

是否有替代方法以MultiContentTreeFieldWidget类似的方式工作但保留您添加项目的顺序?更好的是,是否有一个小部件可以做到这一点并且还允许您重新排序项目?

4

1 回答 1

2

I didn't find an alternative but subsequently z3c.formwidget.query has been updated to use a list instead of a set when processing request parameters. Version 0.7 fixes this

http://pypi.python.org/pypi/z3c.formwidget.query/0.7

Add the following to your [versions] section in buildout to resolve

z3c.formwidget.query = 0.7
于 2011-11-08T10:13:49.287 回答