-2

晕,我正在尝试使用文件字段上传文件。但我总是失败。执行语句时form.errors.as_data(),浏览器返回“tempfile”。我已经尝试从 django 文档和一些 django 参考资料中找到解决方案。但是,还是解决不了。;(

这是我的观点.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})

模型.py

class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d')

表格.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>
4

1 回答 1

1

像这样使用forms.ModelForminstaed怎么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对象可以直接保存到您的模型中。

于 2017-10-04T10:15:07.937 回答