ошибка 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);