难以上传文件到FileField,表格无效
问题描述:
晕,我试图用filefield上传文件。但我总是失败。当执行语句form.errors.as_data()
时,浏览器返回'tempfile'。我已经试图从django文档和一些django参考找到解决方案。但是,仍然无法解决它。 (难以上传文件到FileField,表格无效
这里是我的view.py
def dataprocessing(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
import pdb; pdb.set_trace()
newdoc = Document(docfile=request.FILES['myfile'])
newdoc.save()
#Redirect to the dataprocessing after POST
#return render(request, 'dataprocessing.html')
return HttpResponse("success")
else:
return HttpResponse(form.errors.as_data())
else:
import pdb; pdb.set_trace()
form = DocumentForm() #A empty, unbound form
return render(request, 'dataprocessing.html', {'form': form})
models.py
class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d')
forms.py
class DocumentForm(forms.Form):
tempfile = forms.FileField()
而且dataprocessing.html
<form method="post" enctype="multipart/form-data" action="{% url "dataprocessing" %}">
<div class="form-group">
<label for="up">Input Data</label> {% csrf_token %}
<input type="file" name=myfile class="filestyle" data-buttonName="btn-primary" data-buttonBefore="true" data-size="sm" accept="application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
id="up">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block">Upload Data</button>
<button type="button" class="btn btn-primary btn-block">Download Template</button>
</div>
</form>
答
怎么样使用forms.ModelForm
instaed forms.Form
这样?
# forms.py
class DocumentForm(forms.Model):
class Meta:
model = Document
fields = ['tempfile']
,让你views.py
这样的:
# views.py
def dataprocessing(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponse("success")
else:
return HttpResponse(form.errors.as_data())
else:
form = DocumentForm() #A empty, unbound form
return render(request, 'dataprocessing.html', {'form': form})
这使得form
对象可以直接保存到你的模型。
请为您的问题选择一个更合适的标题。 –
你的模板不是上传文件的字段'tempfile',而是'myfile'(以及应该是一个字符串:'') – dirkgroten
尝试学习使用调试工具,以便您可以检查实际发布的内容,使解决这类问题变得更加容易。例如。在代码中使用'pdb'行来设置断点,或使用django-debugger来检查请求。 – dirkgroten