我想知道为什么会这样:
我在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中提交文件。有人可以帮助我找出我在这里失踪的东西吗?
谢谢
答案 0 :(得分:2)
使用ModelForm 代替表单,除非您有充分理由不这样做。
如果表单未验证,您的HTML将显示空白表单,但未提及错误或以前输入的值,请参阅customizing a form template以了解正确用法。
request.POST ['file']不存在是正常的,它位于request.FILES ['file']中,但必须先将其保存才能使用在一个模型中。如果您使用ModelForm,它是自动的。否则,请参阅handling uploaded files with a model。