2009-10-14 16 views
0

Je me suis heurté à quelques problèmes avec Pylons/Formencode aujourd'hui quand il s'agissait de valider plusieurs cases à cocher. Comme un peu de fond, j'ai quelque chose comme ça dans mon modèle Mako:Pylônes/Formencode avec plusieurs cases à cocher

<input type="checkbox" name="Project" value="1">Project 1</input> 
<input type="checkbox" name="Project" value="2">Project 2</input> 
<input type="checkbox" name="Project" value="3">Project 3</input> 
<input type="checkbox" name="Project" value="4">Project 4</input> 
<input type="checkbox" name="Project" value="5">Project 5</input> 

Dans mon schéma de validation, j'ai eu quelque chose comme ça (s'il vous plaît pardonnez les erreurs - je n'ai pas le code exact Infront de moi):

Project = formencode.foreach.ForEach(formencode.validators.Int()) 

Je me attendais à obtenir une liste des éléments cochés arrière (semble raisonnable, non?) mais j'ai eu une liste avec un seul élément malgré toutes les cases cochées. Est-ce que je fais mal ou est ce que je veux revenir même possible? J'ai écrit un hack autour avec des onclicks pour chaque case à cocher qui ajoute l'élément vérifié à un tableau qui est ensuite posté au format JSON - c'est moche et dommage car je dois repeupler tous les champs moi-même si la validation échoue.

Vous avez des idées?

+0

Hmmmm, semble "Set()" permettra d'atteindre cet objectif. Merci d'avoir joué! – redrockettt

Répondre

2

en utilisant peut-être formencode.validators.Set:

>>> Set.to_python(None) 
[] 
>>> Set.to_python('this') 
['this'] 
>>> Set.to_python(('this', 'that')) 
['this', 'that'] 
>>> s = Set(use_set=True) 
>>> s.to_python(None) 
set([]) 
>>> s.to_python('this') 
set(['this']) 
>>> s.to_python(('this',)) 
set(['this']) 
0

redrockettt,

Avez-vous regardé le docstring à variabledecode? Il vous suggère d'utiliser quelque chose comme:

<input type="checkbox" name="Project-1" value="1">Project 1</input> 
<input type="checkbox" name="Project-2" value="2">Project 2</input> 
<input type="checkbox" name="Project-3" value="3">Project 3</input> 

Vérifiez le texte variabledecode.py ou collé here.