MultiDict 错误 Django
Posted
技术标签:
【中文标题】MultiDict 错误 Django【英文标题】:MultiDict Error Django 【发布时间】:2018-05-21 13:22:24 【问题描述】:我正在使用 Django 并尝试使用 AJAX 获得响应。我有两种形式,第一种很好用。虽然我在处理第二种表单时使用了相同的逻辑,但效果并不好。
models.py
class AskMe(models.Model):
name = models.CharField(max_length=1000)
views.py
def AskMeQ(request):
if request.method == POST:
name = request.POST['name']
AskMe.objects.create(name=name)
urls.py
url('r^askmeQ/$', views.AskMeQ)
ajax 逻辑
$('.former').on('submit', '.ajaxform', function(event)
event.preventDefault();
$.ajax(
url: '/askmeQ/',
type: 'POST',
data: name: $('#name').val(),
csrfmiddlewaretoken: csrftoken
)
.done(function()
console.log("success");
$('.formset').slideToggle(400)
);
)
.fail(function()
console.log("error");
)
.always(function()
console.log("complete");
);
);
错误
Traceback:
File "/usr/local/lib/python3.6/dist-packages/django/utils/datastructures.py" in __getitem__
77. list_ = super().__getitem__(key)
During handling of the above exception ('name'), another exception occurred:
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/pc/Django_Projects/vikas/vikas/views.py" in askmeQ
40. name = request.POST['name']
File "/usr/local/lib/python3.6/dist-packages/django/utils/datastructures.py" in __getitem__
79. raise MultiValueDictKeyError(key)
Exception Type: MultiValueDictKeyError at /askmeQ/
Exception Value: 'name'
我上面使用的逻辑在以前的所有形式中都可以工作,但在这里它会抛出一个错误。 SQLite3 表已创建为projectname_model.name
。
我该如何纠正这个问题?
【问题讨论】:
您至少需要显示 Ajax 代码。 【参考方案1】:尝试在 urls.py 中使用 path() 而不是 url()
【讨论】:
【参考方案2】:该名称似乎未随请求一起发布。因此,name = request.POST['name']
将引发错误,因为密钥不会成为 POST
字典的一部分。
要更正此问题,请将您的代码更改为:
def AskMeQ(request):
if request.method == POST:
name = request.POST.get('name')
if name:
AskMe.objects.create(name=name)
# else:
# error condition handling
【讨论】:
这不会抛出错误,但会在数据库中注册一个None类型。 @PoornaChandra 如果您的所有请求都发生这种情况,那么问题显然出在 ajax 逻辑上。您当前的问题似乎是 MultiDict 问题,我已经回答过了。您可能应该提出一个新问题,包括表单的逻辑和 ajax 请求,并接受这个问题的答案。 我已经更新了我的 AJAX 逻辑...抱歉,我忘了在我的 ajax 请求中添加类名。以上是关于MultiDict 错误 Django的主要内容,如果未能解决你的问题,请参考以下文章
什么是 Python 2 的 multidict 易于适应的替代方案?
Django 和 AngularJS:如何显示来自 Django 调试错误消息的 Angular $http 错误
如何修复 Reactjs、Django、Django Rest Frame 工作项目中的“net::ERR_CONNECTION_REFUSED 和错误:网络错误”错误