如何创建一个像MultiContentTreeFieldWidget一样工作但仍保留项目顺序的Plone表单窗口小部件

时间:2011-10-18 13:08:07

标签: forms plone zope dexterity

我有一个灵巧的行为,允许我关联项目并将关系存储为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')

这很有效,除非你有一些关系,那么每次编辑项目时他们的订单都会改变。我们在页面的右侧栏中显示相关项目(例如,请参阅此article about food),并希望控制订单,以便我们可以先放置更多有趣的预告片。

调试它看起来可能重新排序是因为z3c.formwidget.query.widget.QuerySourceRadioWidget.update在处理请求参数时使用了一个集合。据推测,这是为了防止重复,但有两个令人讨厌的副作用:

  1. 字段的值在未更改时会更新
  2. 订单在可能重要时丢失
  3. 是否有替代MultiContentTreeFieldWidget以类似方式工作但保留添加项目的顺序?更好的是有一个小部件可以做到这一点,也允许你重新排序项目?

1 个答案:

答案 0 :(得分:2)

我没有找到替代方案,但随后z3c.formwidget.query已更新为在处理请求参数时使用列表而不是集合。版本0.7修复了这个

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

将以下内容添加到buildout中的[versions]部分以解决

z3c.formwidget.query = 0.7