datagridfield在dexterity中通过Web内容类型编辑器不可见

时间:2012-01-11 04:48:32

标签: plone dexterity

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

1 个答案:

答案 0 :(得分:2)

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

原因是,collective.z3cform.datagridfield.row.DictRow需要一个模式,定义表行。一旦渲染,这将成为子表单。此实例中的模式编辑器需要根据字段类型询问您(table-)模式。

根据您所使用的解决方案,您可以通过实施具有固定表架构的字段工厂来实现这一目标:

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。