Я хочу прикрепить файл к электронному письму, который включает в себя весь контент, который пользователь вводит из контактной формы. В настоящее время я отсылаю PDF-файл, в котором записываются их данные, и прилагаю этот PDF-файл из места назначения файла. Однако я не знаю, как прикрепить дополнительные файлы, которые пользователь предоставляет в контактной форме. В этом случае это представляется как «msg.attach_file (upload_file)». Мои мысли:
Загрузить файл в пункт назначения; однако каждый раз его нужно переименовывать в унифицированное имя, чтобы я мог обращаться к нему во время процесса прикрепления (msg.attach_file).
Узнайте, как использовать request.FILES, чтобы прикрепить его немедленно, не беспокоясь о его имени файла или месте загрузки (я не уверен, является ли msg.attach_file допустимой командой для этого метода).
Есть ли правильный способ выполнить это действие? Я пытаюсь выполнить метод 2 с моим views.py файлом, который ссылается на мой файл forms.py, но он выдает ошибку.
Views.py
def quote_req(request):
submitted = False
if request.method == 'POST':
form = QuoteForm(request.POST, request.FILES)
company = request.POST['company']
contact_person = request.POST['contact_person']
upload_file = request.FILES['upload_file']
description = 'You have received a sales contact form'
if form.is_valid():
data_dict = {
'company_': str(company),
'contact_person_': str(contact_person),
}
write_fillable_pdf(INVOICE_TEMPLATE_PATH, INVOICE_OUTPUT_PATH, data_dict)
form.save()
# assert false
msg = EmailMessage('Contact Form', description, settings.EMAIL_HOST_USER, ['sample@mail.com'])
msg.attach_file('/uploads/file.pdf')
msg.attach_file(upload_file)
msg.send(fail_silently=False)
return HttpResponseRedirect('/quote/?submitted=True')
else:
form = QuoteForm()
if 'submitted' in request.GET:
submitted = True
Журнал ошибок
TypeError at /quote/
expected str, bytes or os.PathLike object, not InMemoryUploadedFile
Request Method: POST
Request URL: http://www.mytestingwebsitesample.com/quote/
Django Version: 2.1.3
Exception Type: TypeError
Exception Value:
expected str, bytes or os.PathLike object, not InMemoryUploadedFile