首页 > 解决方案 > 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保存的文件,但没有得到如何实现这一点。

标签: djangodjango-models

解决方案


首先,上传的文件可以通过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",没有那个文件是不能上传的)。

如果这不起作用,请向我们展示用于此的模板和表格!


推荐阅读