1

なぜこれが起こっているのか疑問に思います:

POSTでフォームを使用してファイルデータを送信していますが、常に次のように表示されます。

Key 'file' not found in <QueryDict:
{
 u'datum': [u'aaa'],
 u'csrfmiddlewaretoken': [u'USAbRrgU92yj7KFpZHuxf9bWufgnwC4N'], 
 u'anzeige': [u' aaaa'], 
 u'titel': [u' aaa']
}

これは私のhtmlです:

<form id="myform" action="/anzeige_save/" method="post" enctype="multipart/form-data">    
{% csrf_token %} 
<textarea style="width: 450px" id="titel"  name="titel"> </textarea>
<textarea name="anzeige" id="anzeige" 
    style="height: 180px; width: 450px"> </textarea>  
<input type="text" id="datum" name="datum" >
<input type="file" id="file" name="file" size="40" maxlength="100000">
<input type="button" value="speichern" 
    onclick="javascript:submitform()" />
</form>

<script>
  function submitform(){
  document.forms["myform"].submit();
  }
</script>

そして私の見解の一部はこれです:

anzeige=Anzeige(titel=request.POST['titel'], 
                anzeige=end_anzeige, 
                date=datetime.datetime.now(), 
                datum=request.POST['datum'],
                file=request.FILES['file'])
anzeige.save()

私は実際に正しく送信しています。他のクエリと同様に、フォームもQueryDictでファイルを送信する必要があります。誰かが私がここで欠けているものを理解するのを手伝ってもらえますか?

ありがとう

4

1 に答える 1

2
  1. 正当な理由がない限り、フォームの代わりにModelFormを使用してください。

  2. フォームが検証されない場合、エラーや以前に入力された値について言及せずにHTMLに空白のフォームが表示されます。正しい使用法については、フォームテンプレートのカスタマイズを参照してください。

  3. request.POST ['file']が存在せず、request.FILES ['file']にあるのは正常ですが、モデルで使用する前に保存する必要があります。ModelFormを使用する場合、それは自動です。それ以外の場合は、モデルを使用してアップロードされたファイルを処理するを参照してください。

于 2012-11-07T10:10:52.577 に答える