我正在尝试使用模型表单上传文件,但 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/