访问使用 FileField Django 上传的文件

Access to file uploaded with FileField Django

我正在尝试创建一个带有文件字段的 Django 表单,以根据模型上传 pdf。

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

我可以上传文件并将其保存在我的对象中,但是当我尝试使用此代码在我的模板中显示文件时

 {{ prod_req.contract_file }}

它只显示文件的路径 "contracts/file_uploaded.pdf"。我怎样才能 link 下载(或在新标签页中打开)文件?

另外:当我尝试从 Django 管理员打开文件时,link

合同文件 (PDF):当前:contracts/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/

如何访问我的文件?

它就像 Python 文件一样工作。因此,您刚刚引用文件对象的方式。

要获取文本,您需要使用f.read()。所以,在你的模板中,而不是

{{ prod_req.contract_file }}

使用

{{ prod_req.contract_file.read }}

但是,请注意调用 read 会将光标移动到文件末尾。第一次对文件调用 read 时,它会 returns 所有文本。第二次,它 returns 什么都没有。如果您需要两次文本,这只是一个问题,但在这种情况下,请将文本直接存储在上下文对象上。

如果有任何不清楚的地方,请告诉我。