1

我正在尝试使用 Django 1.3 FormWizard 通过 2 个步骤上传文件: 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)像处理文件那样创建表单。有什么方法可以在不更改源代码的情况下上传文件?

4

1 回答 1

5

这在 Django 1.3 表单向导中是不可能的。从Django 表单向导文档

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

可以使用 Django 1.4 表单向导(请参阅处理文件文档)。如果您使用的是 Django 1.3,您可以将新表单向导安装为单独的应用程序

于 2012-02-18T11:12:58.253 回答