django的MultiValueDictKeyError错误,如何处理?

257 投票
10 回答
454472 浏览
提问于 2025-04-16 17:02

我正在尝试把一个对象保存到我的数据库,但出现了一个 MultiValueDictKeyError 错误。

问题出在表单上,is_private 是通过一个复选框来表示的。如果复选框没有被选中,显然就什么都不会传递。这就是错误出现的地方。

我该如何正确处理这个异常,并捕捉到它呢?

出错的代码行是

is_private = request.POST['is_private']

10 个回答

15

你遇到这个问题是因为你在从一个字典里获取一个不存在的键。你需要先检查一下这个键是否在字典里。

可以试试:

is_private = 'is_private' in request.POST

或者

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

这要根据你使用的值来决定。

108

选择最适合你的选项:

1

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

如果请求中有一个叫 is_private 的键,那么 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
377

使用MultiValueDict的get方法。这种方法在普通的字典中也有,可以用来获取一个值,如果这个值不存在,还可以提供一个默认值。

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

一般来说,

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

撰写回答