1

虽然有很多主题,但我找不到正确的问题+答案,我的问题是:

我正在尝试编写文件上传。一旦我提交表格,就会出现这个错误:

MultiValueDictKeyError at /anzeige_save/
Key 'file' not found in <MultiValueDict: {}>

这是我的模型:

class Anzeige(models.Model):
    titel = models.CharField(max_length=300)
    anzeige = models.CharField(max_length=1000)
    date = models.DateTimeField()
    datum = models.CharField(max_length=12)
    file = models.FileField(upload_to='/anzeige/D-d-M-Y/')
    def __unicode__(self):
        return self.titel

这是我的观点:

if request.path == '/anzeige_save/':
    anzeige=Anzeige(titel=request.POST['titel'], anzeige=end_anzeige,date=datetime.datetime.now(), datum=request.POST['datum'],file=request.FILES['file'])
    anzeige.save()
    return HttpResponse("Anzeige saved successfully")

这是我在前端的ajax:

var title = document.getElementById(title).value;
var body = document.getElementById(body).value;
var file = document.getElementById(name_file).value;
var datum = document.getElementById(datum).value;
if(title==" " || body==" " || title=="" || body=="" || datum=="" || datum==" " ){
alert("Please fill out all!");
}else{
    $.ajax({
    url: "/anzeige_save/",
    type: "POST",
    data: {anzeige:body,titel:title,file:file,datum:datum},
}).success(function(data){
    $(succ_message).text(data);
    $(succ_message).fadeIn(1000);
    $(succ_message).fadeOut(2000);
})
 }

这是格式的文件:

...
<input type="file" id="name_file" name="name_file" size="40" maxlength="100000"><br />
...

我在这里错过了什么吗?

我有带有文件字段的模型,并且我正在将其他字段(包括文件)保存到实例中。

感谢您的光临!:)

4

1 回答 1

3

确保您的表单是多部分的:

enctype="multipart/form-data"

忘记这是您错误的常见原因。

编辑:无法通过 ajax* 上传文件。有几个选项:

  1. 发布表格
  2. 如果您不想刷新页面,请在 iframe 中发布表单
  3. * 不完全正确。您可以使用FormData对象(旧浏览器不支持)
于 2012-11-07T08:08:01.483 回答