2016-11-29 4 views
0

Ai-je mal compris quelque chose? Je veux enregistrer une liste de listes, ou un ensemble de listes ....zope.schema Liste - Enregistrer Liste des listes

Je possède ce

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

J'ai essayé de sauver ceci:

[ 
    [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'] 
] 

Mais j'obtiens l'erreur suivante

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') 

Répondre

1

Vous devez définir le type de valeur des éléments de liste. Dans votre cas également une liste imbriquée list ->.

Vous pouvez essayer quelque chose comme ceci:

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

Mais je ne sais pas s'il y a un widget pour ce cas d'utilisation. De mon point de vue, le bon widget pour vous est un widget DataGrid. ->https://github.com/collective/collective.z3cform.datagridfield

Il stocke une liste de dictionnaires. Si vous pouvez nommer correctement les colonnes de votre liste imbriquée, vous pouvez utiliser un champ Liste avec value_type="DictRow" avec un widget de données.

Puisque vous devez définir un schéma séparé, vous pouvez également vous assurer que votre liste contient des données valides.

+0

Oh, je suis désolé, je n'ai pas pensé sur datagridfield - mais dans mes listes peuvent être des centaines de listes, je ne sais pas si datagridfiled peut gérer cela correctement. J'ai essayé TextLinesFieldWidget mais ceci a échoué aussi ... – user966660

+0

Nous avons un datagridwidget avec plusieurs entrées de Hundert. Bien sûr, il faut environ 2 secondes pour afficher la vue d'édition. Mais à mon humble avis c'est OK. Cela dépend aussi du type de widget que vous utilisez (colonnes dans le DataGrid). S'ils effectuent des manipulations DOM avec Javascript, le widget dataagrid n'est peut-être pas la bonne solution pour vous. Mais si vous avez seulement TextLines, et., Cela devrait fonctionner, ou au moins vous devriez l'essayer. – Mathias