Django表单返回form.is_valid False

时间:2016-06-05 19:12:17

标签: django forms

这必须是一个基本问题,但我在Djnago非常新,并试图了解表单的工作原理。我查看了不同的网站和论坛,但我还没有理解我做错了什么。

这是我的表格:

class UploadCSVForm(forms.Form):
   csv_file = forms.FileField()

这是一个非常简单的表格,用于上传CSV文件。

这就是我的看法:

def layer_create(request, template='layers/layer_create.html'):
  if request.method == 'POST':

    form = UploadCSVForm(request.POST, request.FILES)
    #print form.is_bound  # THIS PRINTS TRUE
    #print (request.FILES['csv']) # THIS PRINTS THE FILE IN THE MEMORY

    if form.is_valid():
        print ("valid")
    else:
        print ("not valid")
        out = {'success': False}

    return HttpResponse('test site')

这是我的模板中的表格:

<form id="file-uploader" method="post" enctype="multipart/form-data" action="{% url "layer_create" %}">
      <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
      <input type="file" id="file-input" name="csv" />
      <button type="submit" id="upload-button" class="btn btn-danger">Upload</button>
</form>

使用函数is_bound我看到表单上有实际数据绑定。 当我打印:request.FILES['csv']时,我可以看到内存中上传文件的名称。

但我仍然得到form.is_valid = False没有蚂蚁错误或警告。

1 个答案:

答案 0 :(得分:2)

您已在模板csv中命名该字段,但该表单希望将其命名为csv_file

通常你应该让Django输出模板中的字段,这样可以避免这样的问题。 (它通常也会在错误后重新显示字段时预先填充字段,但出于浏览器安全原因,文件字段不会发生这种情况。)

{{ form.csv_file }}