2011-08-30 2 views
2

Structure Django. Forme html. script views.py.Validation de formulaire et MultiValueDictKeyError

J'ai un formulaire avec plusieurs cases à cocher, l'utilisateur choisit une case à cocher en correspondance avec quels fichiers ils aimeraient télécharger dans un fichier zip. Lorsque toutes les cases sont cochées, un fichier zip est créé et capable de télécharger mais chaque fois qu'une case est cochée, je reçois l'erreur suivante:

MultiValueDictKeyError à/qatools/debug/logs/ « logs » clés ne se trouvent pas dans QueryDict:

Ma validation est la suivante. Il détermine si une case à cocher a été cochée et attribue un 0 ou un 1 au format qu'il appelle un script shell.

logs = 0 
    if request.POST.get & request.POST['logs'] == "on": 
     logs = 1 
+0

Jamais esprit, il fixe .. Aurait été: logs = 0 si 'logs' dans request.POST et request.POST [ 'logs'] == "on": logs = 1 – smurf

+0

Une méthode plus courte pour faire l'instruction if: 'if request.POST.get ('logs') ==" on ":' puisque 'get' est une fonction qui sera par défaut à None si la clé n'existe pas. Voir [Documents QueryDict] (https://docs.djangoproject.com/fr/1.3/ref/request-response/#django.http.QueryDict). – eric

Répondre

3

Ce problème est standard avec des formulaires HTML ... sur le POST une case cochée n'existeront dans les valeurs POST, pas une valeur de « off » comme prévu. Donc, vous devez vérifier l'existence:

logs = 0 
if request.POST.get and 'logs' in request.POST and request.POST['logs'] == "on": 
    logs = 1 
+0

Ouais, je l'ai compris! Ne me laisserais pas répondre à ça. Merci d'avoir répondu de toute façon! – smurf

+1

Vous devriez toujours accepter la réponse ... –

Questions connexes