2012-02-18 75 views
1

我想用Django 1.3 FormWizard上传一个文件,分2步: 1.只有FileField 2.如果文件被正确上传并且有效(自定义验证后),提供给它一个名称和描述。在FormWizard中使用FileField(Django 1.3)

继文档,我写道:

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) 

我多部分/表单数据添加到窗体标签模板: <form enctype="multipart/form-data" action="." method="post">

然而,即使我上传文件,我得到错误“这个字段是必需的”。

我猜想窗体是创建的,省略了request.FILES字段。 我们如何改变这种行为来成功上传FormWizard中的文件?

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

回答

5

这在Django 1.3窗体向导中是不可能的。从Django form wizard docs

重要的限制:因为向导使用HTML隐藏字段来存储页面之间的数据,你可能不以任何形式包括的FileField除了最后一个

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

+0

谢谢阿拉斯代尔。我看到它在1,4上可用,但是当我使用1.3时,您提供链接的外部插件正是我正在寻找的内容,谢谢! – Thomas 2012-02-19 13:05:17