2012-03-19 59 views

回答

4

我有同樣的問題,以及表單嚮導(甚至在Django 1.4)只是沒有爲我工作。定製太多了,有些東西開始出錯,調試很糟糕。

我的確寫了基於現有clases一些代碼。請參閱我的要點,我發佈了一個適合我的解決方案。如果您有任何意見或建議(包括班級名稱),請發佈。

  • 多頁形式管理器,佈置爲(數學)曲線圖,動態路徑(下一個形式取決於實際狀態和用戶輸入)和形式數。存儲和驗證處理。基於Django-1.4的django.contrib.formtools.wizard.views.SessionWizardViewhttps://gist.github.com/3098817

  • 自定義Django SessionStorage。刪除了處理文件的所有功能。基於Django-1.4的django.contrib.formtools.wizard.storage.base.BaseStoragedjango.contrib.formtools.wizard.storage.session.SessionStoragehttps://gist.github.com/3080251

2

那你想幹什麼?

如果你想創造一個步驟X重複ň倍那麼答案是肯定的一個嚮導,你可以做到這一點,這並不難。

你只需要創建一個嚮導類工廠,創建給出了具體的參數類就大功告成了。

在你的意思的情況下,我可以改變即時嚮導的步驟。 答案仍然是,但然後事情會比這更復雜一點,因爲你將不得不在初始化後改變嚮導的內部狀態。

這不是樂趣可言,如果你真的需要第二個選項我真的建議考慮一下,儘量找到一個替代的設計和選擇動態嚮導方式作爲最後的手段。

+0

你能提供嚮導類工廠的代碼? 和這個工廠的參數是什麼? – aRkadeFR 2014-09-25 15:05:08

1

我這個問題太掙扎。 Tommaso Barbugli說的是爲班級創建一個工廠。 我目前正在使用Django 1.6。

在url

,包括此:

url('/create_wizard/', factory_wizard, name='factory_wizard') 

這是工廠:

class WizardClass(SessionWizardView): 
    ... 

def factory_wizard(request, *args, **kwargs): 
    parameter_to_know_which_step_number = # I let you implement this one (I did it by the session data) 
    ret_form_list = [FirstFormClass, SecondFormClass] 

    for _ in range(parameter_to_know...): 
     form_list.append(SecondFormClass) 

    class ReturnClass(WizardClass): 
     form_list = ret_form_list 

    return ReturnClass.as_view()(request, *args, **kwargs)