5

我的 FormWizard (Django 1.4) 允许用户来回走动,直到完成向导。向导保留用户填写的所有值并显示它们,以防用户返回到他已经完成的步骤。

这适用于 CharField,但不适用于 FileFields。如果用户在一个包含 FileField 的步骤中提交了一个文件,然后又回到这个步骤,他必须再次上传一个文件。

有没有办法让用户不必重新上传文件?

请注意,表单数据尚未保存到数据库中。

4

1 回答 1

2

我最近遇到了同样的问题,可以通过继承 Django 的 SessionWizardView(在我的例子中为 NamedUrlSessionWizardView)并覆盖 get_form 方法来解决它。

基本上我会执行以下操作:

  • 获取已为该步骤存储的文件。
  • 遍历当前提交的文件。
  • 如果提交的文件为无,则忽略它,否则覆盖已存储的值。

这是代码:

from django.contrib.formtools.wizard.views import NamedUrlSessionWizardView

class MyWizardView(NamedUrlSessionWizardView):

    def get_form(self, step=None, data=None, files=None):
        if step:
            step_files = self.storage.get_step_files(step)
        else:
            step_files = self.storage.current_step_files

        if step_files and files:
            for key, value in step_files.items():
                if files.has_key(key) and files[key] is not None:
                    step_files[key] = files[key]
        elif files:
            step_files = files

        return super(MyWizardView, self).get_form(step, data, step_files)
于 2012-09-01T07:27:01.777 回答