📜  Django 表单我无法保存图片文件 - Python (1)

📅  最后修改于: 2023-12-03 15:00:27.430000             🧑  作者: Mango

Django 表单我无法保存图片文件 - Python

问题描述

在使用 Django 表单时,尝试上传图片文件并保存到数据库,但是无法成功保存。在控制台上看到了以下错误信息:

'NoneType' object has no attribute 'name'
问题分析

该错误通常是由于表单未正确处理上传的文件数据导致的。在 Django 中,表单提交的文件数据需要通过 request.FILES 获取,而不能通过 request.POST 获取。此外,还需要在表单中添加 enctype="multipart/form-data" 属性以指示该表单包含文件数据。

解决方案
  1. 确认表单中已正确添加 enctype="multipart/form-data" 属性。
<form method="post" action="{% url 'upload' %}" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="file" required>
    <button type="submit">Upload</button>
</form>
  1. 在表单处理函数中,使用 request.FILES 获取上传的文件对象,并将其保存至数据库。
def upload_view(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            upload = form.save(commit=False)
            upload.file_field = request.FILES['file']
            upload.save()
            return redirect('uploads_list')
    else:
        form = UploadForm()
    return render(request, 'upload.html', {'form': form})

其中,request.FILES 获取上传的文件对象,并将其保存至 file_field 字段。

总结

在使用 Django 表单处理文件上传时,需要按照上述步骤正确处理表单数据,避免出现保存失败的情况。同时,还需要注意在数据库中设置 FileField 类型的字段时,需要指定相应的上传目录和文件命名规则。