Доступ к файлу, загруженному с помощью FileField Django

Я пытаюсь создать форму Django с полем файла для загрузки PDF-файла на основе модели.

#models.py
class ProductionRequest(models.Model):
     ...
     contract_file = models.FileField('Contract file (PDF)', upload_to='contracts/')
     ...

Я могу загрузить файл и сохранить его в своем объекте, но когда я пытаюсь показать файл в моем шаблоне с помощью этого кода

 {{ prod_req.contract_file }}

он показывает мне только путь к файлу «контракты / file_uploaded.pdf». Как сделать ссылку для скачивания (или открытия в новой вкладке) файла?

Плюс: когда я пытаюсь открыть файл от администратора Django, по этой ссылке

Файл контракта (PDF): В настоящее время: контракты / file_uploaded.pdf

Файл не показываю, вот такое:

Page not found (404) Request URL: http://127.0.0.1:8000/admin/appname/productionrequest/1/change/contracts/file_uploaded.pdf/change/

Как я могу получить доступ к своему файлу?


person dxtr69    schedule 06.11.2017    source источник
comment
stackoverflow .com / questions / 9462999 / может помочь   -  person Tom Dalton    schedule 06.11.2017


Ответы (1)


Он работает так же, как файл Python. Итак, то, как вы это сделали, относится к файловому объекту.

Чтобы получить текст, нужно использовать f.read(). Итак, в вашем шаблоне вместо

{{ prod_req.contract_file }}

использовать

{{ prod_req.contract_file.read }}

НО, обратите внимание, что вызов read перемещает курсор в конец файла. Когда вы в первый раз вызываете read для файла, он возвращает весь текст. Во второй раз ничего не возвращает. Это проблема, только если вам нужен текст дважды, но в этом случае сохраните текст непосредственно в объекте контекста.

Сообщите мне, если что-то неясно.

person Sam Bobel    schedule 06.11.2017
comment
Спасибо, теперь я могу получить свой файл! - person dxtr69; 13.11.2017