MultiValueDictKeyError在发送附件
问题描述:
<script type="text/template" id="_escalation-container">
<div class="response-container">
<form action="" class="escalation-form" enctype="multipart/form-data">{% csrf_token %}
<a href="#" class="add-scripted-message">{% trans "Add Message" %}</a>
</div>
<div class="sub-content-footer" style="margin-top: 10px;">
<input id="file" type="file" name="file"/>
</div>
</form>
</div>
</script>
我看着Django official documentation,并试图去做那里写的东西。MultiValueDictKeyError在发送附件
View.py:
if request.POST:
form = EscalationForm(request.POST, request.FILES)
if form.is_valid():
escalation_message = form.save(commit=False)
handle_uploaded_file(request.FILES['file'])
escalation_message.save()
而且handle_uploaded_file是完全一样的;
def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
EscalationForm.py:
class EscalationForm(forms.ModelForm):
class Meta:
model = EscalationMessage
,我的模式是:
class EscalationMessage(models.Model):
file = models.FileField(null=True, blank=True, upload_to='.')
另外,我添加了这些在我的settings.py;
FILE_UPLOAD_HANDLERS = [
"django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler"
]
然而,当我试图发送附件它给
File "/Users/mk/Documents/interaction/views.py", line 169, in create_escalation_message
escalation_message.file = EscalationMessage(file=request.FILES['file'])
File "/Users/mk/Documents/venvs/lib/python2.7/site-packages/django/utils/datastructures.py", line 322, in __getitem__
raise MultiValueDictKeyError(repr(key))
MultiValueDictKeyError: "'file'"
我在Web开发新的和我写一个小型演示。我试图发送附件的消息,然后我搜索了一个例子,但它给出了这个错误。你对这个错误有什么想法吗?
谢谢
答
文件上传必须使用POST
方法。更改form
标签:
<form action="" method="post" class="escalation-form" enctype="multipart/form-data">
我不明白这一点,你在views.py形式已经是模型EscalationMessage'的'模式的形式,你为什么做'escalation_message.file = EscalationMessage(... )'?不应该'文件'字段'FileField'? –
好吧,这是错误的,因为你说,但我不能使用“escalation_message.file = request.FILES ['文件']”这一个以及。因为据我了解这也是处理文件的错误方式,有没有适当的方法来处理它? – waterkinq
我需要处理它,因为在此之后,我将发送附件为此文件的电子邮件。 – waterkinq