在FormWizard中使用FileField(Django 1.3)

时间:2012-02-18 08:38:58

标签: django file-upload formwizard django-formwizard

我正在尝试使用Django 1.3 FormWizard上传一个包含两个步骤的文件: 1.只有FileField 2.如果文件已正确上传且有效(在自定义验证后),请提供给它一个名称和说明。

在文档之后,我写道:

class CreateCheckWizard(FormWizard):
    def done(self, request, form_list):
        return HttpResponseRedirect('/my_checks/')
    def get_template(self, step):
        return ['create_check_%s.html' % step, 'create_check_1.html']

class CreateCheckForm1(forms.Form):
    my_file = forms.FileField()

class CreateCheckForm2(forms.Form):
    title = forms.CharField(max_length=255)

我将multipart / form-data添加到模板中的FORM标记: <form enctype="multipart/form-data" action="." method="post">

但是,即使我上传文件,也会收到错误“此字段是必填项。”

我想创建的表单省略了request.FILES字段。 我们如何更改该行为以成功上传FormWizard中的文件?

编辑:看看Django源代码,它确实使用form(request.POST)而不是form(request.POST, request.FILES)来创建表单,就像应该处理文件一样。 有没有更改源代码上传文件的方法?

1 个答案:

答案 0 :(得分:5)

这在Django 1.3表单向导中是不可能的。来自Django form wizard docs

  

重要限制:由于向导使用HTML隐藏字段在页面之间存储数据,因此除最后一个外,您可能不会包含任何形式的FileField

可以使用Django 1.4表单向导(参见handling files docs)。如果您使用的是Django 1.3,则可以将新表单向导安装为separate app