Estoy tratando de guardar un objeto en mi base de datos, pero está arrojando un MultiValueDictKeyError
error.
Los problemas se encuentran dentro del formulario, el is_private
está representado por una casilla de verificación. Si la casilla de verificación NO está seleccionada, obviamente no se pasa nada. Aquí es donde se arroja el error.
¿Cómo trato adecuadamente esta excepción y la atrapo?
La linea es
is_private = request.POST['is_private']
Respuestas:
Use el
get
método de MultiValueDict . Esto también está presente en los dictados estándar y es una forma de obtener un valor al tiempo que proporciona un valor predeterminado si no existe.Generalmente,
fuente
checked
cuando está marcada pero se enviaránull
si no está marcada. Puede verificar esto en el panel "Red" de la herramienta Chrome / Firefox DEV. Es por eso que estableceFalse
el valor predeterminado: si lo tienenull
, hágalofalse
.Elige lo que es mejor para ti:
1
Si la
is_private
clave está presente en request.POST, lais_private
variable será igual a ella; de lo contrario, será igual a False.2
3
fuente
Obtiene eso porque está tratando de obtener una clave de un diccionario cuando no está allí. Necesita probar si está allí primero.
tratar:
o
dependiendo de los valores que estés usando.
fuente
¿Por qué no intentaste definir
is_private
en tus modelos comodefault=False
?fuente
Otra cosa para recordar es que se
request.POST['keyword']
refiere al elemento identificado por elname
atributo html especificadokeyword
.Entonces, si su formulario es:
entonces,
request.POST['keyword']
yrequest.POST['results']
contendrá el valor de los elementos de entradakeyword
yresults
, respectivamente.fuente
Puede manejar este error poniendo:
fuente
Para mí, este error ocurrió en mi proyecto django debido a lo siguiente:
Inserté un nuevo hipervínculo en mi home.html presente en la carpeta de plantillas de mi proyecto de la siguiente manera:
En views.py, tenía las siguientes definiciones de cuenta y sobre:
Como se puede ver en el no. 3 arriba, en el último patrón de URL, estaba llamando incorrectamente views.count mientras que necesitaba llamar a views.about. Esta línea
fulltext = request.GET['fulltext']
en la función de conteo (que se llamó erróneamente debido a una entrada incorrecta en los patrones de url) de views.py arrojó la excepción multivaluedictkeyerror.Luego cambié el último patrón de url en urls.py por el correcto
path('about/',views.about,name="about")
, es decir , y todo funcionó bien.Aparentemente, en general, un programador novato en django puede cometer el error que cometí al llamar erróneamente a otra función de vista para una url, que podría estar esperando un conjunto diferente de parámetros o pasar un conjunto diferente de objetos en su llamada de representación, en lugar del comportamiento previsto.
Espero que esto ayude a algún programador novato a django.
fuente