2012-05-15 67 views
5

我的FormWizard(Django 1.4)允許用戶來回走動,直到他完成嚮導。該向導保存用戶填寫的所有值,並顯示它們以防用戶返回到他已完成的步驟。FormWizard和FileFields(Django 1.4)

這適用於CharField,但不適用於FileFields。如果用戶在包含FileField的步驟中提交文件,並且稍後返回到此步驟,則他必須再次上傳文件。

有沒有辦法讓用戶不必重新上傳文件?

請注意,表單數據尚未保存到數據庫。

回答

2

我最近遇到了同樣的問題,可以通過繼承Django的SessionWizardView(在我的情況下是NamedUrlSessionWizardView)並重寫get_form方法來解決它。

Basicly我做到以下幾點:

  • 獲取已存儲的步驟中的文件。
  • 迭代當前提交的文件。
  • 如果提交的文件是無,忽略它,否則覆蓋已存儲的值。

下面是代碼:

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)