Я пытаюсь сохранить объект в моей базе данных, но выдает MultiValueDictKeyError
ошибку.
Проблемы лежат в форме, is_private
которая представлена флажком. Если флажок НЕ установлен, очевидно, ничего не пропущено. Это где ошибка забрасывается.
Как правильно разобраться с этим исключением и поймать его?
Линия
is_private = request.POST['is_private']
Ответы:
Используйте метод MultiValueDict
get
. Это также присутствует в стандартных диктовках и является способом извлечения значения при обеспечении значения по умолчанию, если оно не существует.В общем-то,
источник
checked
когда установлен флажок, но будет отправлять,null
если флажок не установлен. Вы можете проверить это на панели «Сеть» инструмента DEV Chrome / Firefox. Вот почему вы устанавливаетеFalse
значение по умолчанию: если естьnull
, сделайте этоfalse
.Выберите, что лучше для вас:
1
Если
is_private
ключ присутствует в request.POST,is_private
переменная будет равна ему, если нет, то она будет равна False.2
3
источник
Вы получаете это, потому что пытаетесь получить ключ из словаря, когда его там нет. Вы должны проверить, если это там в первую очередь.
пытаться:
или
в зависимости от значений, которые вы используете.
источник
Почему вы не попытались определить
is_private
в своих моделях какdefault=False
?источник
Также следует помнить, что это
request.POST['keyword']
относится к элементу, идентифицированному указаннымname
атрибутом htmlkeyword
.Итак, если ваша форма:
тогда
request.POST['keyword']
иrequest.POST['results']
будет содержать значение входных элементовkeyword
иresults
соответственно.источник
Вы можете обработать эту ошибку, поместив:
источник
Для меня эта ошибка произошла в моем проекте django из-за следующего:
Я вставил новую гиперссылку в свой home.html подарок в папке шаблонов моего проекта, как показано ниже:
В views.py у меня были следующие определения count и about:
Как видно из №. 3 выше, в последнем шаблоне URL я неправильно вызывал views.count, тогда как мне нужно было вызвать views.about. Эта линия
fulltext = request.GET['fulltext']
в функции count (которая была вызвана по ошибке из-за неправильной записи в urlpatterns) для views.py вызвала исключение multivaluedictkeyerror.Затем я изменил последний шаблон URL в urls.py на правильный, т.е.
path('about/',views.about,name="about")
И все работало нормально.По-видимому, в общем, программист-новичок в django может совершить ошибку, которую я допустил, ошибочно вызвав другую функцию представления для URL-адреса, которая может ожидать другой набор параметров или передачу другого набора объектов при вызове рендеринга, а не предполагаемое поведение.
Надеюсь, это поможет начинающему программисту в Django.
источник