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 回答