zope.schema列表 - 保存列表列表

时间:2016-11-29 14:01:19

标签: plone zope

我误解了什么吗?我想保存列表列表或一组列表......

我有这个

fcurricula = schema.List(
    title=_(u'Curricula'),
    required=False)

我试图保存这个:

[
  [261, u'26-BEA', 138, 4, u'h\xf6ren, listen', 4.00, 0, u'655755sa939b9b10'],
  [261, u'26-BEA', 138, 4, u'h\xf6ren, listen', 4.00, 0, u'655755sa939b9b10']
]

但我得到以下错误

Module zope.tales.expressions, line 217, in __call__
Module Products.PageTemplates.Expressions, line 155, in _eval
Module Products.PageTemplates.Expressions, line 117, in render
Module dudal.db.browser.dbimport, line 216, in dudal_fcurricula_import
Module plone.registry.registry, line 47, in __setitem__
Module plone.registry.record, line 83, in _set_value
Module zope.schema._bootstrapfields, line 182, in validate
Module zope.schema._field, line 475, in _validate
Module zope.schema._bootstrapfields, line 309, in _validate
Module zope.schema._bootstrapfields, line 248, in _validate
Module zope.schema._bootstrapfields, line 233, in _validate
Module zope.schema._bootstrapfields, line 209, in _validate
WrongType: ([[261, u'26-BEA', 138, 4, u'h\xf6ren, listen', 4.0, 0, u'655755sa939b9b10'], [261, u'26-BEA', 138, 4, u'h\xf6ren, listen', 4.0, 0, u'655755sa939b9b10']], <type 'set'>, 'value')

1 个答案:

答案 0 :(得分:1)

您需要定义列表元素的value_type。在你的情况下,还list - &gt;嵌套列表。

您可以尝试这样的事情:

fcurricula = schema.List(
    title=_(u'Curricula'),
    required=False)
    value_type=schema.List(...)

但我不知道这个用例是否有一个小部件。

从我的角度来看,适合您的小部件是一个数据网格小部件。 - &GT; https://github.com/collective/collective.z3cform.datagridfield

它存储了一个词典列表。 如果可以在嵌套列表中正确命名列,则可以使用带有value_type="DictRow"的List字段和datagridwidget。

由于您必须定义单独的架构,您还可以确保,您的列表包含有效数据。