Как создать виджет формы Plone, который работает как MulticontentTreefieldWidget, но сохраняет порядок элементов
Вопрос
У меня есть поведение ловкости, которое позволяет мне связывать предметы и хранить отношения как Uuids
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
Это работает аналогичным образом, но сохраняет заказ, который вы добавляете элементы? Еще лучше есть ли виджет, который делает это, а также позволяет переупорядочить элементы?
Решение
Я не нашел альтернативу, но впоследствии Z3C.FormWidget.Query был обновлен, чтобы использовать список вместо набора при обработке параметров запроса. Версия 0.7 исправляет это
http://pypi.python.org/pypi/z3c.formwidget.query/0.7
Добавьте следующее в раздел [версии] в Buildout, чтобы разрешить
z3c.formwidget.query = 0.7