Расширение ответа vangheem: вы можете обеспечить поддержку коллективно.z3cform.datagridfield, предоставив фабрику полей, но это будет взлом.
Причина в том, что 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.