Как создать виджет формы Plone, который работает как MultiContentTreeFieldWidget, но сохраняет порядок элементов - PullRequest
3 голосов
/ 18 октября 2011

У меня есть поведение ловкости, которое позволяет мне связывать предметы и сохранять отношения как 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 использует набор при обработке параметров запроса. Предположительно это предотвращает дублирование, но имеет два неприятных побочных эффекта:

  1. значение поля обновляется, если оно не изменилось
  2. заказ теряется, когда это может быть важно

Есть ли альтернатива MultiContentTreeFieldWidget, которая работает аналогичным образом, но сохраняет порядок добавления элементов? Еще лучше, есть ли виджет, который делает это, а также позволяет вам изменять порядок элементов?

1 Ответ

2 голосов
/ 08 ноября 2011

Я не нашел альтернативы, но впоследствии z3c.formwidget.query был обновлен для использования списка вместо набора при обработке параметров запроса. Версия 0.7 исправляет это

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

Добавьте следующее в ваш [version] раздел в buildout для разрешения

z3c.formwidget.query = 0.7
...