django MultiValueDictKeyError ошибка, как мне с ней справиться
Я пытаюсь сохранить объект в моей базе данных, но он MultiValueDictKeyError
ошибку MultiValueDictKeyError
.
Проблемы лежат в форме, is_private
представлен is_private
. Если флажок НЕ установлен, очевидно, ничего не пропущено. Это где ошибка забрасывается.
Как мне правильно разобраться с этим исключением и поймать его?
Линия
is_private = request.POST['is_private']
Ответы
Ответ 1
Используйте метод MultiValueDict get
. Это также присутствует в стандартных dicts и является способом получения значения при предоставлении значения по умолчанию, если оно не существует.
is_private = request.POST.get('is_private', False)
Вообще,
my_var = dict.get(<key>, <default>)
Ответ 2
Выберите лучшее для вас:
1
is_private = request.POST.get('is_private', False);
Если в запросе присутствует ключ is_private
. POST, переменная is_private
будет равна ей, если нет, то она будет равна False.
2
if 'is_private' in request.POST:
is_private = request.POST['is_private']
else:
is_private = False
3
from django.utils.datastructures import MultiValueDictKeyError
try:
is_private = request.POST['is_private']
except MultiValueDictKeyError:
is_private = False
Ответ 3
Вы получаете это, потому что вы пытаетесь получить ключ из словаря, когда его там нет. Вам нужно проверить, находится ли он там первым.
попробовать:
is_private = 'is_private' in request.POST
или
is_private = 'is_private' in request.POST and request.POST['is_private']
в зависимости от используемых вами значений.
Ответ 4
Почему вы не пытались определить is_private
в своих моделях как default=False
?
class Foo(models.Models):
is_private = models.BooleanField(default=False)
Ответ 5
Следует также помнить, что request.POST['keyword']
ссылается на элемент, идентифицируемый указанным keyword
атрибута html name
.
Итак, если ваша форма:
<form action="/login/" method="POST">
<input type="text" name="keyword" placeholder="Search query">
<input type="number" name="results" placeholder="Number of results">
</form>
тогда request.POST['keyword']
и request.POST['results']
будут содержать значение keyword
input и results
соответственно.
Ответ 6
is_private = request.POST.get('is_private', 'default value')
Ответ 7
Сначала проверьте, имеет ли объект запроса параметр ключа is_private. В большинстве случаев это MultiValueDictKeyError происходило из-за отсутствия ключа в словарном объекте запроса. Поскольку словарь является неупорядоченным ключом, пара значений "ассоциативные воспоминания" или "ассоциативные массивы"
Другими словами request.GET или request.POST - это словарь-объект, содержащий все параметры запроса. Это специфично для Джанго.
Метод get() возвращает значение для данного ключа, если ключ находится в словаре. Если ключ недоступен, возвращается значение по умолчанию Нет.
Вы можете обработать эту ошибку, поместив:
is_private = request.POST.get('is_private', False);
Ответ 8
Для меня эта ошибка произошла в моем проекте django из-за следующего:
-
Я вставил новую гиперссылку в свой home.html подарок в папке шаблонов моего проекта, как показано ниже:
<input type="button" value="About" onclick="location.href='{% url 'about' %}'">