Ich versuche, ein Objekt in meiner Datenbank zu speichern, aber es wird ein MultiValueDictKeyError
Fehler ausgegeben.
Das Problem liegt im Formular, das is_private
durch ein Kontrollkästchen dargestellt wird. Wenn das Kontrollkästchen NICHT aktiviert ist, wird offensichtlich nichts übergeben. Hier wird der Fehler behoben.
Wie gehe ich richtig mit dieser Ausnahme um und fange sie ab?
Die Linie ist
is_private = request.POST['is_private']
Antworten:
Verwenden Sie die MultiValueDict-
get
Methode. Dies ist auch in Standarddiktaten vorhanden und bietet eine Möglichkeit, einen Wert abzurufen und gleichzeitig einen Standardwert anzugeben, falls dieser nicht vorhanden ist.Allgemein,
quelle
checked
wenn aktiviert, wird gesendet,null
wenn nicht aktiviert. Sie können dies im Bereich "Netzwerk" des Chrome / Firefox DEV-Tools überprüfen. Aus diesem Grund legen SieFalse
den Standardwert fest: Wenn erhaltennull
, machen Sie esfalse
.Wählen Sie, was für Sie am besten ist:
1
Wenn der
is_private
Schlüssel in request.POST vorhanden ist, ist dieis_private
Variable gleich, andernfalls ist sie gleich False.2
3
quelle
Sie erhalten das, weil Sie versuchen, einen Schlüssel aus einem Wörterbuch zu erhalten, wenn er nicht vorhanden ist. Sie müssen zuerst testen, ob es dort drin ist.
Versuchen:
oder
abhängig von den Werten, die Sie verwenden.
quelle
Warum haben Sie nicht versucht,
is_private
in Ihren Modellen als zu definierendefault=False
?quelle
Eine andere Sache, an die Sie sich erinnern sollten, ist, dass sie
request.POST['keyword']
sich auf das Element bezieht, das durch das angegebene HTML-name
Attribut identifiziert wirdkeyword
.Also, wenn Ihr Formular ist:
dann,
request.POST['keyword']
undrequest.POST['results']
wird den Wert der Eingangselemente enthaltenkeyword
undresults
, respectively.quelle
Sie können diesen Fehler behandeln, indem Sie Folgendes eingeben:
quelle
Bei mir trat dieser Fehler in meinem Django-Projekt aus folgenden Gründen auf:
Ich habe einen neuen Hyperlink in meine home.html eingefügt, der im Vorlagenordner meines Projekts wie folgt vorhanden ist:
In views.py hatte ich die folgenden Definitionen von count und about:
Wie in Nr. Zu sehen ist. 3 oben, im letzten URL-Muster, habe ich views.count fälschlicherweise aufgerufen, während ich views.about aufrufen musste. Diese Zeile
fulltext = request.GET['fulltext']
in der Zählfunktion (die fälschlicherweise wegen falscher Eingabe in URL-Mustern aufgerufen wurde) von views.py hat die multivaluedictkeyerror-Ausnahme ausgelöst.Dann habe ich das letzte URL-Muster in urls.py in das richtige geändert, dh
path('about/',views.about,name="about")
alles hat gut funktioniert.Anscheinend kann ein Programmieranfänger in Django im Allgemeinen den Fehler machen, den ich gemacht habe, indem ich fälschlicherweise eine andere Ansichtsfunktion für eine URL aufgerufen habe, die möglicherweise andere Parametersätze erwartet oder andere Objektsätze in ihrem Renderaufruf übergibt, als das beabsichtigte Verhalten.
Hoffe, dies hilft einigen Neulingen Programmierer zu Django.
quelle