我试图将一个对象保存到数据库中,但它抛出了一个MultiValueDictKeyError错误。问题在于表单中,is_private由复选框表示。如果未选中该复选框,则显然不会传递任何内容。这就是错误被抛弃的地方。如何正确处理这个异常并捕获它?台词是
MultiValueDictKeyError
is_private
is_private = request.POST['is_private']
gblwokeq1#
使用MultiValueDict的get方法。这也存在于标准字典中,是一种获取值的方法,同时提供一个默认值,如果它不存在。
get
is_private = request.POST.get('is_private', False)
一般来说
my_var = dict.get(<key>, <default>)
falq053o2#
选择最适合你的:
is_private = request.POST.get('is_private', False);
如果is_private键存在于request.POST中,则is_private变量将等于它,如果不是,则它将等于False。
if 'is_private' in request.POST: is_private = request.POST['is_private'] else: is_private = False
from django.utils.datastructures import MultiValueDictKeyError try: is_private = request.POST['is_private'] except MultiValueDictKeyError: is_private = False
htrmnn0y3#
你得到这个是因为你试图从字典里得到一个关键字,而它不在那里。你得先测试它是否在里面。尝试:
is_private = 'is_private' in request.POST
或
is_private = 'is_private' in request.POST and request.POST['is_private']
取决于你使用的值。
6qftjkof4#
另一件需要记住的事情是request.POST['keyword']引用由指定的html name属性keyword标识的元素。如果你的表单是:
request.POST['keyword']
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的值。
request.POST['results']
results
hiz5n14c5#
为什么不尝试在模型中将is_private定义为default=False?
default=False
class Foo(models.Models): is_private = models.BooleanField(default=False)
qf9go6mv6#
首先检查请求对象是否有'is_private'密钥参数。大多数情况下,此MultiValueDictKeyError是由于类似字典的请求对象中缺少键而发生的。因为dictionary是一个无序的键、值对“关联记忆”或“关联数组”换句话说。GET或request.POST是一个类似字典的对象,包含所有请求参数。这是Django特有的。方法get()返回给定键的值,如果key在字典中。如果键不可用,则返回默认值None。您可以通过以下方式处理此错误:
jecbmhm37#
对我来说,这个错误发生在我的django项目中,原因如下:1.我插入了一个新的超链接在我的home.html目前在我的项目的templates文件夹如下:
<input type="button" value="About" onclick="location.href='{% url 'about' %}'">
1.在www.example.com中views.py,我有以下关于count和about的定义:
def count(request): fulltext = request.GET['fulltext'] wordlist = fulltext.split() worddict = {} for word in wordlist: if word in worddict: worddict[word] += 1 else: worddict[word] = 1 worddict = sorted(worddict.items(), key = operator.itemgetter(1),reverse=True) return render(request,'count.html', 'fulltext':fulltext,'count':len(wordlist),'worddict'::worddict}) def about(request): return render(request,"about.html")
1.在www.example.com中urls.py,我有以下URL模式:
urlpatterns = [ path('admin/', admin.site.urls), path('',views.homepage,name="home"), path('eggs',views.eggs), path('count/',views.count,name="count"), path('about/',views.count,name="about"), ]
可以看出,没有。在上面的第3个URL模式中,我错误地调用了views.count,而我需要调用views.about。www.example.com的count函数中的这行fulltext = request.GET['fulltext'](由于urlpatterns中的错误输入而被错误地调用)views.py抛出了multivaluedictkeyerror异常。然后我把www.example.com中的最后一个URL模式更改urls.py为正确的。path('about/',views.about,name="about"),一切都很好。显然,一般来说,django的新手程序员可能会犯我犯的错误,错误地调用另一个url的视图函数,这可能是期望不同的参数集或者在render调用中传递不同的对象集,而不是预期的行为。希望这对一些新手程序员django有帮助。
fulltext = request.GET['fulltext']
path('about/',views.about,name="about")
cbjzeqam8#
我得到了'MultiValueDictKeyError'错误,而使用 AJAX 与Django。只是因为在选择元素时没有输入'#'。像这样
data:{ name : $('id_name').val(),},
然后我把'#'和id放在一起,问题就解决了。
data:{ name : $('#id_name').val(),},
fcwjkofz9#
如果请求中不存在该名称,则将插入NULL值
name = request.data.get('name')
9条答案
按热度按时间gblwokeq1#
使用MultiValueDict的
get
方法。这也存在于标准字典中,是一种获取值的方法,同时提供一个默认值,如果它不存在。一般来说
falq053o2#
选择最适合你的:
1
如果
is_private
键存在于request.POST中,则is_private
变量将等于它,如果不是,则它将等于False。2
3
htrmnn0y3#
你得到这个是因为你试图从字典里得到一个关键字,而它不在那里。你得先测试它是否在里面。
尝试:
或
取决于你使用的值。
6qftjkof4#
另一件需要记住的事情是
request.POST['keyword']
引用由指定的htmlname
属性keyword
标识的元素。如果你的表单是:
则
request.POST['keyword']
和request.POST['results']
将分别包含输入元素keyword
和results
的值。hiz5n14c5#
为什么不尝试在模型中将
is_private
定义为default=False
?qf9go6mv6#
首先检查请求对象是否有'is_private'密钥参数。大多数情况下,此MultiValueDictKeyError是由于类似字典的请求对象中缺少键而发生的。因为dictionary是一个无序的键、值对“关联记忆”或“关联数组”
换句话说。GET或request.POST是一个类似字典的对象,包含所有请求参数。这是Django特有的。
方法get()返回给定键的值,如果key在字典中。如果键不可用,则返回默认值None。
您可以通过以下方式处理此错误:
jecbmhm37#
对我来说,这个错误发生在我的django项目中,原因如下:
1.我插入了一个新的超链接在我的home.html目前在我的项目的templates文件夹如下:
1.在www.example.com中views.py,我有以下关于count和about的定义:
1.在www.example.com中urls.py,我有以下URL模式:
可以看出,没有。在上面的第3个URL模式中,我错误地调用了views.count,而我需要调用views.about。www.example.com的count函数中的这行
fulltext = request.GET['fulltext']
(由于urlpatterns中的错误输入而被错误地调用)views.py抛出了multivaluedictkeyerror异常。然后我把www.example.com中的最后一个URL模式更改urls.py为正确的。
path('about/',views.about,name="about")
,一切都很好。显然,一般来说,django的新手程序员可能会犯我犯的错误,错误地调用另一个url的视图函数,这可能是期望不同的参数集或者在render调用中传递不同的对象集,而不是预期的行为。
希望这对一些新手程序员django有帮助。
cbjzeqam8#
我得到了'MultiValueDictKeyError'错误,而使用 AJAX 与Django。只是因为在选择元素时没有输入'#'。像这样
然后我把'#'和id放在一起,问题就解决了。
fcwjkofz9#
如果请求中不存在该名称,则将插入NULL值