ошибка Django MultiValueDictKeyError, как с ней справиться

Я пытаюсь сохранить объект в базе данных, но он бросает MultiValueDictKeyError ошибка.

проблемы лежат в пределах формы,is_private представлен флажком. Если флажок не установлен, очевидно, ничего не передается. Вот где ошибка выбрасывается.

как мне правильно справиться с этим исключением и поймать его?

строка

is_private = request.POST['is_private']

6 ответов


использовать MultiValueDict это get метод. Это также присутствует в стандартных диктах и является способом получения значения при предоставлении значения по умолчанию, если оно не существует.

is_private = request.POST.get('is_private', False)

как правило,

my_var = dict.get(<key>, <default>)

выберите то, что лучше для вас:

1

is_private = request.POST.get('is_private', False);

если is_private ключ присутствует в запросе.Сообщение 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

вы получаете это, потому что вы пытаетесь получить ключ из словаря, когда его нет. Сначала нужно проверить, там ли он.

попробуй:

is_private = 'is_private' in request.POST

или

is_private = 'is_private' in request.POST and request.POST['is_private']

в зависимости от используемых значений.


почему вы не пытались определить is_private в вашей модели, как default=False?

class Foo(models.Models):
    is_private = models.BooleanField(default=False)

еще одна вещь, чтобы помнить, что request.POST['keyword'] относится к элементу, определенному указанным html name атрибут keyword.

Итак, если ваша форма-это:

<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 и results, соответственно.


сначала проверьте, имеет ли объект запроса ключевой параметр' is_private'. Большинство из этих MultiValueDictKeyError случай произошел отсутствует ключ в объекте запроса, похожем на словарь. Потому что словарь это неупорядоченный ключ, пара значений "ассоциативные воспоминания" или " ассоциативный массивы"

другими словами. запрос.Получить или запросить.Пост-это словарь-как объект, содержащий все параметры запроса. Это специфично для Django.

в метод GET() возвращает значение для данного ключа, если ключ находится в словарь. Если key недоступен, возвращает значение по умолчанию None.

вы можете справиться с этой ошибкой, поставив:

is_private = request.POST.get('is_private', False);