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