-2

我正在研究 Dexterity 的行为,并为此使用了collective.z3cform.datagridfield。

这应该是:

+----+-------+----+  
| title | value | link |  
+----+-------+----+  

tile = schema.TextLine  
value = schema.TextLine  
link = schema.Choice (Related Widget)

这是我的代码:

class IDifferentiation(form.Schema):
    title = schema.TextLine(title=_(u'Title for this element', default=u'Title for this element'), required=True)
    value = schema.TextLine(title=_(u'Text for this element', default=u'Text for this element'), required=False)

    form.widget(downloads=RelatedItemsFieldWidget)
    link = schema.Choice(
        title=_(u"Person"),
        source=UUIDSourceBinder(),
        required=True)

class IDifferentiationBox(form.Schema):
    """ """
    form.widget(differentiation=DataGridFieldFactory)
    differentiation = schema.List(
            title=_(u"Differentiation"),
            value_type=DictRow(title=_(u"Facts"), schema=IDifferentiation)
    )

但是对于“链接”字段,我只得到一个 Select-Dropdown 或一个 In-Out-Widget(取决于使用的 Widget),没有可供选择的数据/内容类型。

4

2 回答 2

1

我很确定当您使用时,您的界面form directives上没有工作。IDifferentiation因为它不是 z3c.form ,所以它是一个数据网格子表单。

但是collective.z3cform.datagridfield 添加了一些入口点来修改它的行为。

该包example.conference通过覆盖添加/编辑表单和视图模板将不同的小部件添加到特定的数据网格子表单字段。

首先,您需要注册两个模板,如下所示

<browser:page
    for="plone.dexterity.interfaces.IDexterityContent"
    name="differentiationbox_edit"
    class=".ifferentiationbox.DataGridEditView"
    permission="cmf.ModifyPortalContent"
    />

<browser:page
    for="plone.dexterity.interfaces.IDexterityContent"
    name="ifferentiationbox_view"
    class=".ifferentiationbox.DataGridView"
    permission="zope2.View"
    />

其次,更改数据网格子表单字段的小部件 在此答案中仅显示一个示例(编辑表单),因为添加表单和视图模板是相同的。

class DataGridEditView(DefaultEditForm):
    """Edit form that uses the ContentTreeWidget for some fields in
    the datagrids.
    """

    def datagridInitialise(self, subform, widget):
        if widget.name == 'form.widgets.differentiation':
            subform.fields['link'].widgetFactory = ContentTreeFieldWidget

所以这将添加ContentTreeFieldWidget到您的数据网格子表单字段中link

于 2015-02-04T09:17:23.520 回答
0

问题不只是这一行中的错误字段名称吗?:

form.widget(downloads=RelatedItemsFieldWidget)

应该是

form.widget(link=RelatedItemsFieldWidget)
于 2016-02-14T23:18:56.533 回答