【问题标题】:Using FileField in a FormWizard (Django 1.3)在 FormWizard 中使用 FileField (Django 1.3)
【发布时间】:2012-03-09 12:52:46
【问题描述】:

我正在尝试使用 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) 创建表单,就像处理文件一样。 有什么方法可以在不修改源代码的情况下上传文件?

【问题讨论】:

    标签: django file-upload formwizard django-formwizard


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢阿拉斯代尔。我看到它在 1,4 上可用,但由于我使用的是 1.3,所以您提供链接的外部插件正是我想要的,谢谢!
    猜你喜欢
    • 2013-01-25
    • 2016-01-09
    • 2016-01-09
    • 2014-02-04
    • 1970-01-01
    • 2012-05-22
    • 2017-05-26
    • 2012-01-09
    • 2013-11-23
    相关资源
    最近更新 更多