django - Django ORM在没有模型形式的情况下保存上传的文件
问题描述
这是我的模型:
class Profile(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
)
certificate = models.FileField(null=True, blank=True, unique=False)
当用户在前端上传文件时,我正在尝试更新证书。
这样做如下:
def update(request):
if request.user.is_authenticated:
if request.method == 'POST':
profile = Profile.objects.get(user__id=request.user.id)
profile.certificate = request.POST['certificate']
profile.save()
return render(request, 'dashboard/update.html')
else:
return redirect('user.login')
我看到该字段已填充,但是当我单击 Django 模板上的文件名时,它没有显示,说找不到页面,但我在同一模型中有另一个文件字段,它没有更新,它工作正常。
谁能帮我完成它?我正在尝试上传没有modelfrom保存的文件,但没有得到如何实现这一点。
解决方案
首先,上传的文件可以通过request.FILES
,而不是request.POST
!所以,它应该是:
profile.certificate = request.FILES['certificate']
此外,请确保您的模板中包含以下内容:
<form method="POST" enctype="multipart/form-data" action="{% url 'your_url' %}">
[...]
</form>
(注意enctype="multipart/form-data"
,没有那个文件是不能上传的)。
如果这不起作用,请向我们展示用于此的模板和表格!
推荐阅读
- c - 为什么索引值为0时没有输出
- mysql - 无法从我的本地机器连接到 mysql 到远程服务器 10060
- javascript - 拖放多部分/表单数据已发布但无法接收 $_FILES
- reactjs - 反应复选框取决于父状态
- python - 如何从 Tensorflow 中的多个对齐数据集中随机选择数据?
- php - 如何从不使用 sdk 的 php-curl 获取谷歌分析数据?
- bash - ERR 陷阱和命令替换
- android - 在我的 Android 项目中使用 Realm 数据库时无法生成 GlideApp 和 Glide 请求
- node.js - 使用 req.end 时,它会在控制台中打印两次。为什么?
- python - Selenium 无法切换到新打开的选项卡