2013-08-01 1 views
3

Plone 4.2.0.1, plone.app.registry 1,1, plone.supermodel 1.1.1, collective.z3cform.datagridfield 0,11использованием collective.z3cform.datagridfield с plone.app.registry и GenericSetup

Я пытаюсь используйте коллекцию.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 для этой записи. Ввод значения ТТП и экспортировать его с 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 «конвертер = IFromUnicode (поле)» и в отладчике я вижу, что значение «поле» не является на самом деле ни один.

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

+0

реестра были некоторые проблемы, почему она не может поддерживать сложные типы полей, как DGF. Либо 1) перестаньте пытаться 2) быть готовым идти длинными отрезками, чтобы исправить проблему с помощью реестра и DGF. –

ответ

1

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

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