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的主要内容,如果未能解决你的问题,请参考以下文章

从 pyspark 数据框创建 multidict

什么是 Python 2 的 multidict 易于适应的替代方案?

Django 和 AngularJS:如何显示来自 Django 调试错误消息的 Angular $http 错误

Django 错误报告简单语法错误

完整性错误和操作错误 Django 1.6.6

如何修复 Reactjs、Django、Django Rest Frame 工作项目中的“net::ERR_CONNECTION_REFUSED 和错误:网络错误”错误