J'essaie d'enregistrer un objet dans ma base de données, mais cela génère une MultiValueDictKeyError
erreur.
Le problème réside dans le formulaire, le is_private
est représenté par une case à cocher. Si la case à cocher n'est PAS cochée, évidemment rien n'est passé. C'est là que l'erreur est jetée.
Comment gérer correctement cette exception et l'attraper?
La ligne est
is_private = request.POST['is_private']
Réponses:
Utilisez la
get
méthode de MultiValueDict . Ceci est également présent sur les dictionnaires standard et est un moyen de récupérer une valeur tout en fournissant une valeur par défaut si elle n'existe pas.Généralement,
la source
checked
quand est cochée mais enverranull
si elle n'est pas cochée. Vous pouvez le vérifier dans le panneau "Réseau" de l'outil Chrome / Firefox DEV. C'est pourquoi vous définissezFalse
comme valeur par défaut: si obtenunull
, créez-lefalse
.Choisissez ce qui vous convient le mieux:
1
Si la
is_private
clé est présente dans request.POST, lais_private
variable lui sera égale, sinon, alors elle sera égale à False.2
3
la source
Vous obtenez cela parce que vous essayez d'obtenir une clé d'un dictionnaire alors qu'elle n'est pas là. Vous devez d'abord tester s'il y est.
essayer:
ou
selon les valeurs que vous utilisez.
la source
Pourquoi n'avez-vous pas essayé de définir
is_private
dans vos modèles commedefault=False
?la source
Une autre chose à retenir est que
request.POST['keyword']
fait référence à l'élément identifié par l'name
attribut html spécifiékeyword
.Donc, si votre formulaire est:
puis,
request.POST['keyword']
etrequest.POST['results']
contiendra la valeur des éléments d'entréekeyword
etresults
, respectivement.la source
Vous pouvez gérer cette erreur en mettant:
la source
Pour moi, cette erreur s'est produite dans mon projet django pour les raisons suivantes:
J'ai inséré un nouveau lien hypertexte dans mon home.html présent dans le dossier templates de mon projet comme ci-dessous:
Dans views.py, j'avais les définitions suivantes de count et about:
Comme on peut le voir dans le no. 3 ci-dessus, dans le dernier modèle d'URL, j'appelais incorrectement views.count alors que j'avais besoin d'appeler views.about. Cette ligne
fulltext = request.GET['fulltext']
dans la fonction count (qui a été appelée par erreur en raison d'une entrée incorrecte dans les modèles d'url) de views.py a levé l'exception multivaluedictkeyerror.Ensuite, j'ai changé le dernier modèle d'URL dans urls.py par le bon
path('about/',views.about,name="about")
, et tout a bien fonctionné.Apparemment, en général, un programmeur débutant dans django peut faire l'erreur que j'ai faite d'appeler à tort une autre fonction de vue pour une URL, qui pourrait s'attendre à un ensemble de paramètres différent ou à transmettre un ensemble d'objets différents dans son appel de rendu, plutôt que le comportement prévu.
J'espère que cela aidera certains programmeurs débutants à django.
la source