django - 文件上传在 Django 中使用 modelform 给出错误请求

标签 django file-upload django-forms

我正在尝试使用模型表单上传文件,但 form.save() 给了我错误的请求。 这是我的模型:

class cv(models.Model):
    name = models.CharField('Name', max_length=64, null=True)
    path_to_cv = models.FileField('CV', upload_to='/', null=True)

表格如下:

class Step2(forms.ModelForm):
    class Meta:
    model = cv

这是 View :

def phdStep2(request):
    if request.method == 'POST':
        form = PhdStep2(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/step/3/')
    else:
        form = PhdStep2()
    return render(request, 'step2.html', {'form': form})

这是表单的模板:

<form action="/step/2" method="post" class="well form" role="form" enctype="multipart/form-data">
{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
    <button type="submit" class="btn btn-primary">
        Submit
    </button>
{% endbuttons %}
</form>

这是settings.py中的media_root:

MEDIA_ROOT = '/home/supertux/PyCharm/myproject/admissions/media'
MEDIA_URL = '/media/'

我已经阅读了大约 10 个这样的线程,发现大多数时候问题是我已经合并的形式中的 enctype 。现在据我了解,这应该上传文件,因为它是模型表单,但我总是收到 400 错误请求。我想将文件的名称和路径存储在数据库中。我做错了什么?

最佳答案

尝试将 upload_to='/' 替换为 upload_to='%Y/%m/%d' 并确保运行 django 应用程序的用户具有写入权限到 MEDIA_ROOT。如果这些建议都没有帮助,您可以打开一些额外的日志记录,以期揭示问题所在。

更新: 我建议您将 upload_to 设置为某个值,这样您就不会在同一目录中堆积 100 个甚至 1000 个文件。随着时间的推移,它将变得难以管理。我还没有尝试过,但是如果您将其设置为 upload_to='',它会接受吗?在 Django 1.6 中,他们将此参数设为可选。

更新2:关于哪个版本是可选的,我不正确。我正在阅读文档的开发版本。抱歉。

关于django - 文件上传在 Django 中使用 modelform 给出错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858730/

相关文章:

ruby-on-rails - 无方法错误 : undefined method `bytesize' for #<Array:

python - django 从连接到任何网络的任何机器访问本地主机

node.js - Sails.js 船长 : How to read the uploaded file stream during upload?

python - Django 根据用户组成员身份在模板中显示项目

php - 如何在 PHP 中使用来自两个不同服务器的 MySQL 数据库?

Django ModelChoiceField : how to iter through the instances in the template?

python - 仅具有查看权限的 Django 模型表单将所有字段排除在外

python - Django ManyToManyField 指定中间模型。通过 OneToOneField 关系

django - 如何在 Django 测试中发送命令行输入响应

python - Django 表单向导快速完成按钮