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 に答える