Estoy tratando de guardar un objeto en mi base de datos, pero está arrojando un MultiValueDictKeyErrorerror.
Los problemas se encuentran dentro del formulario, el is_privateestá 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
getmé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
checkedcuando está marcada pero se enviaránullsi no está marcada. Puede verificar esto en el panel "Red" de la herramienta Chrome / Firefox DEV. Es por eso que estableceFalseel valor predeterminado: si lo tienenull, hágalofalse.Elige lo que es mejor para ti:
1
Si la
is_privateclave está presente en request.POST, lais_privatevariable 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_privateen tus modelos comodefault=False?fuente
Otra cosa para recordar es que se
request.POST['keyword']refiere al elemento identificado por elnameatributo html especificadokeyword.Entonces, si su formulario es:
entonces,
request.POST['keyword']yrequest.POST['results']contendrá el valor de los elementos de entradakeywordyresults, 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