2010-02-05 4 views
1

Je construis une application sur App Engine et je veux faire un champ de formulaire avec plusieurs choix.
Voici ma forme (il utilise django.newforms du moteur app sdk (django 0,96)):Comment faire un champ de formulaire de choix multiples sur le moteur app

from google.appengine.ext.db import djangoforms 
from django import newforms 

class KeywordForm(djangoforms.ModelForm): 
    class Meta: 
     model = Keyword 
     exclude = ['site', 'created_at', 'last_update'] 

    choices = [ (1, 'value1'), (2, 'value2'), (3, 'value3'), (4, 'value4') ] 
    server = newforms.fields.MultipleChoiceField(choices = choices) 

Le problème est le suivant: lorsque je soumets la forme (avec une ou plusieurs valeurs sélectionnées) J'ai cette erreur de validation: "Entrez une liste de valeurs"

Je ne comprends pas pourquoi ... une aide sur ce problème sera très appréciée.
Merci! :)

Modifier (informations supplémentaires):
Voici le code de validation de formulaire:

form = forms.KeywordForm(data=self.request.POST) 
if form.is_valid(): 
    ... 

self.request.POST:

UnicodeMultiDict([(u'keyword', u'test'), (u'server[]', u'1'), (u'server[]', u'2')]) 

Répondre

2

J'ai trouvé une solution! Le problème est self.request.POST Dictionnaire fourni au constructeur de mon formulaire.
le format de Il n'est pas apprécié par MultipleChoiceField.clean() fonction, donc je l'a transformé.

Voici le code de validation de travail:

args = self.request.arguments() 
data = {} 
for i in args: 
    data[i] = self.request.get_all(i) 
form = forms.KeywordForm(data=data) 
if form.is_valid(): 
    [...] 
+0

Vous pouvez tout simplement passer self.request.POST.items(). –

+0

Merci beaucoup Nick, c'est beaucoup plus élégant! – Mat

+0

@Nick Johnson J'ai le même problème. Voulez-vous s'il vous plaît aider? Voici ma forme http://dpaste.org/a8FZc/ merci – Kulbir

Questions connexes