0

我已添加collective.z3cform.datagridfield到我的构建中,在我的站点设置中将其视为活动;但是,我无法datagridfield通过 Web 编辑器为灵巧内容类型添加类型字段。我错过了什么?

4

1 回答 1

2

扩展 vangheem 的答案:您可以通过提供现场工厂来为collective.z3cform.datagridfield 提供支持,但这将是一个hack。

原因是,collective.z3cform.datagridfield.row.DictRow需要一个模式,定义表行。一旦渲染,这将成为一个子表单。在这种情况下,模式编辑器需要根据字段类型询问您(表)模式。

根据您所追求的解决方案,您可以通过实现具有固定表架构的字段工厂来摆脱困境,如下所示:

from five import grok
from zope import schema
import collective.z3cform.datagridfield.row
import plone.schemaeditor.interfaces
import zope.interface

# example from http://pypi.python.org/pypi/collective.z3cform.datagridfield
class ITableRowSchema(zope.interface.Interface): 
    one = schema.TextLine(title=u"One")
    two = schema.TextLine(title=u"Two")
    three = schema.TextLine(title=u"Three")

# new field factory for the zope.schema.interfaces.IObject
class DataGridFieldFactory(grok.GlobalUtility):
    grok.provides(plone.schemaeditor.interfaces.IFieldFactory)
    # this will show up in the schema editor vocabulary
    title = "DataGridField"

    def __call__(self, *args, **kwargs):
        # that's the horrid part as it will nail your field to this
        # specific schema
        kw = dict(value_type=collective.z3cform.datagridfield.row.DictRow(
            schema=ITableRowSchema))
        kwargs.update(kw)
        return zope.schema.List(*args, **kwargs)

请查看:plone.schemaeditor.fields.py有关现场工厂的更多信息。

这将为您提供内容类型的基本数据网格。缺少的是小部件,您目前无法将其声明为 AFAIK。

于 2012-01-19T00:51:35.927 回答