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 из-за следующего:

  1. Я вставил новую гиперссылку в свой home.html подарок в папке шаблонов моего проекта, как показано ниже:

    <input type="button" value="About" onclick="location.href='{% url 'about' %}'">