文件字段不传递数据到表单 [英] File field not passing data to form

查看:159
本文介绍了文件字段不传递数据到表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用python 2.7& django 1.5



Forms.py

  class FileUploadForm(forms.Form):
file = forms.FileField()
title = forms.CharField(max_length = 200)

HTML

 < form action = {%url'upload_file'%}method =postclass =userFroms> 
{%csrf_token%}
< ul class =pull-left>
< li>
< div class =formLabel>标题< / div>

< div class =formFields>< input name =titletype =text/>

< / div>

< / li>

< li>
< div class =formLabel>上传文件< / div>
< div class =formFields>
< input name =filetype =filesize =20/>
< / div>
< / li>


< / ul>
< p align =centerstyle =margin:20px 0;>< input type =submitvalue =submitclass =btn btn-info/>< / p为H.

< / form>

View.py

  def upload_file(request):
如果request.method =='POST':
form = FileUploadForm(request.POST,request.FILES)
如果form.is_valid():
handle_uploaded_file(request.FILES ['file'])
return HttpResponseRedirect('/ success / url /')
else:
form = FileUploadForm()
返回render_to_response('upload.html',{'form':form})


def handle_uploaded_file(f):
打开('documents / name.txt','wb +')作为目的地:
f.chunks()中的块:
destination.write(chunk)

我的表单有两个字段,都是必填字段。因此,当我提交表单时,它使用form.is_valid()函数检查有效性。在我的表单字典中,我可以看到标题正在clean_data中发送,但是文件丢失。文件虽然在字典中可用。我做错了什么?

  {'files':{},'is_bound':True,'cleaning_data'标题':u'dsad'},'error_class':< class'django.forms.util.ErrorList'>'empty_permitted':False,'fields':{'title':< django.forms.fields .CharField对象在0x7f64783ed410>},'initial':{},'label_suffix':u':','prefix':None,'_changed_data':None,'data':< QueryDict:{u'title' [u'dsad'],u'csrfmiddlewaretoken':[u'fRCrB7JrXIQVVfQSJW70eayu5DM9PiIM'],你的文件':[u'406123_138447936269777_246495737_n.jpg']}>'_errors':{'file':[u'This field ']},'auto_id':u'id_%s'} 


解决方案

您尚未设置表单的编码类型:

 < form enctype =multipart / form -dataaction ={%url'upload_document'%}method =postclass =userFroms> 


I am using python 2.7 & django 1.5

Forms.py

class FileUploadForm( forms.Form ):
    file = forms.FileField()
    title = forms.CharField(max_length = 200)

HTML

<form action="{% url 'upload_file' %}" method="post" class="userFroms">
    {% csrf_token %}
      <ul class="pull-left">
      <li>
      <div class="formLabel ">Title</div>

      <div class="formFields"><input name="title" type="text" />

      </div>

      </li>

      <li>
      <div class="formLabel">Upload File</div>
      <div class="formFields">
     <input name="file" type="file" size="20" />
      </div>
      </li>


      </ul>
       <p align="center" style="margin:20px 0; "><input type="submit" value="submit" class="btn btn-info" /></p>

   </form>   

View.py

def upload_file(request):
    if request.method == 'POST':
        form = FileUploadForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/success/url/')
    else:
        form = FileUploadForm()
    return render_to_response('upload.html', {'form': form})


def handle_uploaded_file(f):
    with open('documents/name.txt', 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)

My form has two fields and both are required. Therefore, when I submit the form, it checks for the validity using the form.is_valid() function. In my forms dictionary I can see that the title is being sent in cleaned_data, but the file is missing. File though is available in the dictionary. What am I doing wrong?

{'files': {}, 'is_bound': True, 'cleaned_data': {'title': u'dsad'}, 'error_class': <class 'django.forms.util.ErrorList'>, 'empty_permitted': False, 'fields': {'title': <django.forms.fields.CharField object at 0x7f64783ed410>}, 'initial': {}, 'label_suffix': u':', 'prefix': None, '_changed_data': None, 'data': <QueryDict: {u'title': [u'dsad'], u'csrfmiddlewaretoken': [u'fRCrB7JrXIQVVfQSJW70eayu5DM9PiIM'], u'file': [u'406123_138447936269777_246495737_n.jpg']}>, '_errors': {'file': [u'This field is required.']}, 'auto_id': u'id_%s'}

解决方案

You haven't set the form's encoding type:

<form enctype="multipart/form-data" action="{% url 'upload_document' %}" method="post" class="userFroms">

这篇关于文件字段不传递数据到表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆