django.utils.datastructures.MultiValueDictKeyError DJANGO

时间:2017-11-02 18:52:06

标签: ajax django input multipartform-data

我有一张表格。当我在不使用ajax的情况下发布表单时,它运行良好。但是当我使用ajax时,我有这样的错误;

django.utils.datastructures.MultiValueDictKeyError:

我的代码低于不使用ajax的代码。有用。 HTML表单:

<form id="add_form" action="/adding/" method="post" enctype="multipart/form-data">
   <input type="text" name="title">
   <input type="file" name="picture">
   <button type="submit" id="send_form" value="ok">Ok</button>
</form>

我的views.py代码是:

if request.method == "POST":
    title = request.POST.get('title')
    pic = request.FILES['picture']
    query = Images_Table(title=title, pic=pic)
    query.save()

我的型号代码是:

class Images_Table(models.Model):
     title = models.CharField(max_length=70, blank=True, null=True)
     pic = models.FileField(upload_to='images_folder', blank=True, null=True)

直到这里;每件事都很正常,代码有效。当我使用ajax时,我有一个错误。我的HTML表单:

<form id="add_form" method="post" enctype="multipart/form-data">
    <input type="text" name="title">
    <input type="file" name="picture">
    <button id="send_form" value="ok">Ok</button>
</form>

我的ajax代码是:

$("#send_form").click(function(){
  $.ajax({
     url: '/adding/',
     method:'post',
     data: $("#add_form").serialize(),
     headers: '{{ csrf_token }}',
     success : function(){
         alert('Success posted!');
     }
  });
});

错误代码如下;

django.utils.datastructures.MultiValueDictKeyError: "'picture'"

1 个答案:

答案 0 :(得分:0)

我通过更改ajax解决了这个问题。

$("#send_form").click(function(){
   var file_data = $('#picture').prop('files')[0];
   var form_data = new FormData($('form').get(0));
   form_data.append('file', file_data);
   $.ajax({
     url: '/adding/',
     method:'post',
     cache: false,
     contentType: false,
     processData: false,
     data: form_data,
     headers: {'X-CSRFToken': '{{ csrf_token }}'},
     success : function(){
       alert('Success posted!');
     }
   });
});