【发布时间】:2022-01-14 03:16:39
【问题描述】:
我打算在 Django 中创建一个简单的文件上传应用程序(并入一些更大的项目中)。对于这个,我使用了两个链接:/files/ - 列出来自特定用户的所有上传文件,/files/upload/ - 显示上传表单供用户在服务器上添加新文件。
我正在使用 PostgreSQL 数据库,我计划将我的所有文件存储在 File 模型中,如下所示:
class File(models.Model):
content = models.FileField()
uploader = models.ForeignKey(User, on_delete=models.CASCADE)
我的文件上传视图如下所示:
@login_required
def file_upload_view(request):
if request.method == "POST" and request.FILES['file']:
file = request.FILES['file']
File.objects.create(content=file, uploader=request.user)
return render(request, "file_upload_view.html")
else:
return render(request, "file_upload_view.html")
而我的文件列表视图看起来像这样:
@login_required
def file_view(request):
files = File.objects.filter(uploader = request.user)
return render(request, "file_view.html", {'files': files})
问题是,我希望我的file_view() 在模板中显示某个用户上传的所有文件(我已经这样做了),每个文件都有一个指向其下载位置的超链接。我一直在尝试在我的文件列表模板中执行此操作:
{% extends 'base.html' %}
{% block content %}
<h2>Files of {{ request.user }}</h2>
<br>
{% for file in files %}
<a href="{{ file.content }}" download>{{ file.content }}</a>
{% endfor %}
{% endblock %}
但我的浏览器正在尝试下载一些.htm 页面,即使我上传的文件类型为.txt。
我的问题是:在将文件添加到模型之前,我是否还需要将文件上传到某个目录中?我是否需要在我的模型中实际添加文件的 URL 作为新字段?文件不是自动上传到我的 PostgreSQL 数据库吗?
任何帮助将不胜感激。 谢谢。
【问题讨论】:
标签: python django postgresql