5

My FormWizard (Django 1.4) では、ユーザーはウィザードを完了するまで前後に移動できます。ウィザードは、ユーザーが入力したすべての値を保持し、ユーザーが既に完了したステップに戻った場合にそれらを表示します。

これは CharField ではうまく機能しますが、FileFields では機能しません。ユーザーが FileField を含むステップでファイルを送信し、後でこのステップに戻った場合、ファイルを再度アップロードする必要があります。

ユーザーがファイルを再アップロードする必要がないようにする方法はありますか?

フォーム データはまだデータベースに保存されていないことに注意してください。

4

1 に答える 1

2

私は最近同じ問題に遭遇し、Django の SessionWizardView (私の場合は NamedUrlSessionWizardView) をサブクラス化し、get_form メソッドをオーバーライドすることで解決できました。

基本的に私は次のことを行います:

  • ステップ用に既に保存されているファイルを取得します。
  • 現在送信されているファイルを反復処理します。
  • 送信されたファイルが None の場合は無視し、それ以外の場合は既に保存されている値を上書きします。

コードは次のとおりです。

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 に答える