Использование коллективный.z3cform.datagridfield с plone.app.registry и GenericSetup

Plone 4.2.0.1, plone.app.registry 1.1, plone.supermodel 1.1.1, коллективный.z3cform.datagridfield 0,11

Я пытаюсь использоватьватся за свойством colle.z3cform.datagridfield для поля plone.app.registry, но у меня возникают проблемы с его настройкой. Документация, кажется, не говорит о чем-то ином, кроме как использовать коллективный.z3cform.datagridfield.registry.DictRow для Постоянной версии для реестра.

Для справки, мой класс выглядит так:

class IMySchema(form.Schema):
  code = schema.TextLine(title = _(u"Code"), required=False)
  name = schema.TextLine(title = _(u"Name"), required=False)

from collective.z3cform.datagridfield.registry import DictRow
class IMySettings(form.Schema):
  """ """
  form.widget(display_fields=DataGridFieldFactory)
  display_fields = schema.List(
                     title = _(u"Display Fields"),
                     description = _(u"The fields that will be displayed in view and edit pages"),
                     value_type=DictRow(title=_(u"Field"), schema=IMySchema),
                     required=False,
                     )

Я могу установить пустое значение с GenericSetup, и моя форма панели управления, которая взаимодействует с этим реестром, работает. Но я не могу заставить GenericSetup импортировать значения из registry.xml для этой записи. Если ввести значение TTP и экспортировать его с помощью GenericSetup, получится следующее:

<registry>
  <record field="display_fields" interface="my.product.interfaces.settings.IMySettings" name="my.product.interfaces.settings.IMySettings.display_fields">
    <field type="plone.registry.field.List">
      <description>The fields that will be displayed in view and edit pages</description>
      <required>False</required>
      <title>Display Fields</title>
    </field>
    <value>
      <element>{'code': u'authors', 'name': u'Authors'}</element>
    </value>
  </record>
</registry>

Но если я пытаюсь импортировать его, я получаю сообщение об ошибке!

TypeError: ('Could not adapt', None, <InterfaceClass zope.schema._bootstrapinterfaces.IFromUnicode>)

Вот эта строка в plone.supermodel.utils "converter = IFromUnicode(field)", и в отладчике я вижу, что значение для 'field' на самом деле None.

Итак, как правильно обрабатывать registry.xml для полей данных? Или мне придется добавлять записи программно в setuphandlers.py или что-то? Я довольно новичок в использовании реестра и plone.supermodel, и, учитывая, что в поле указано "Нет", я не удивлюсь, если мой registry.xml просто неверен.

1 ответ

Я думаю, что проблема в том, что вы объявляете код и имя как schema.TextLine (unicode), но вы используете строку в реестре; попробуйте следующее:

{u'code ': u'authors', u'name ': u'Authors'}

Другие вопросы по тегам