2016-11-29 9 views
0

私は何かを誤解しましたか?私は zope.schemaリスト - リストのリストを保存

が、私はこの

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

リスト要素のvalue_typeを定義する必要があります。あなたの場合は、list - >入れ子になったリストもあります。

あなたはこのような何かしてみてください可能性があります

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

をしかし、このユースケースのためのウィジェットがあるかどうかはわかりません。

私の見解では、右ウィジェットはデータグリッドウィジェットではありません。 - >https://github.com/collective/collective.z3cform.datagridfield

辞書のリストを格納します。 ネストされたリストの列に適切な名前を付けることができる場合は、value_type="DictRow"のListフィールドをdatagridwidgetとともに使用できます。

個別のスキーマを定義する必要があるため、リストに有効なデータが含まれていることを確認することもできます。

+0

ああ、申し訳ありませんが、私はdatagridfieldについては考えていませんでしたが、私のリストには何百ものリストがあるかもしれませんが、datagridfiledがこれを正しく処理できるかどうかはわかりません。私はTextLinesFieldWidgetを試しましたが、これはまた失敗しました... – user966660

+0

私たちはいくつかのhundertエントリを持つdatagridwidgetを持っています。もちろん、編集ビューをレンダリングするには2秒かかります。しかし、IMHOこれは問題ありません。これはまた、あなたが使用しているウィジェットの種類(データグリッドの列)によって異なります。彼らがJavascriptでDOM操作を行う場合、DataGridウィジェットは適切なソリューションではないかもしれません。しかし、TextLinesしか持っていなければ、これはうまくいくはずです。 – Mathias

関連する問題