<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'"
Я новичок в веб-разработки, и я пишу мини-демо. Я пытался отправить сообщение с вложением, но я искал пример, но он дал эту ошибку. Есть ли у вас какие-либо идеи об ошибке?
Спасибо
Я не понимаю, ваша форма в views.py уже типовая форма модели 'EscalationMessage', почему вы делаете' escalation_message.file = EscalationMessage (...) '? Должно ли поле 'file'' 'FileField'? –
ОК, это неправильно, как вы сказали, но я не могу использовать "escalation_message.file = request.FILES ['file']" этот тоже. Потому что, насколько я понимаю, это также неправильный способ обработки файла, есть ли у него правильный способ справиться с этим? – waterkinq
Мне нужно обработать его, потому что после этого я отправлю электронное письмо, вложение которого является этим файлом. – waterkinq