代码之家  ›  专栏  ›  技术社区  ›  Preston

request.FILES为空,但请求中存在文件

  •  0
  • Preston  · 技术社区  · 7 年前

    django website 我试图上传一个文件,对内容进行检查,然后反馈给用户并存储文件内容。

    但是,request.FILES总是空的,我遇到了问题。我的代码如下(注意print语句后的输出):

    **forms.py**
    class UploadFileForm(forms.Form):
        data_import = forms.FileField()
    
        class Meta:
            model = Recipe
            fields = ('data_import',)
    
    
    **view**
    def recipes_list(request):
        template = 'recipes/recipes_list.html'
    
        if request.method == 'GET':
            user = request.user
            queryset = Recipe.objects.filter(user=user)
            form = UploadFileForm()
            return render(request, 'recipes/recipes_list.html', context={'recipes': queryset, 'form': form})
    
        elif request.method == 'POST':
            print(request.FILES) # <MultiValueDict: {}>
            print(request.POST) # <QueryDict: {'csrfmiddlewaretoken': ['...'], 'data_import': ['recette.json']}>
            form = UploadFileForm(request.POST, request.POST.data_import)
    
            if form.is_valid():
                return HttpResponseRedirect(template)
            else:
                print(form.errors)
    
    
    **template**
    <form method="post">
        {% csrf_token %}
        {{ form }}
        <button type="submit">submit</button>
    </form>  
    

    我得到的错误是:

    <ul class="errorlist"><li>data_import<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
    

    但是我可以看到文件已经上传,并且在 request.POST.get('data_import') .

    我显然做错了什么,有人能给我指出正确的方向吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Exprator    7 年前
    <form method="post" enctype= multipart/form-data>
        {% csrf_token %}
        {{ form }}
        <button type="submit">submit</button>
    </form> 
    

    把你的表格换成上面的表格