2012-12-02 32 views
0

今天我已經開始在django 1.4中使用Form Wizard了。功能似乎是不錯的,但是根據該文件,一個需要通過form_list(和condition_dict,必要時)到as_view方法(這意味着urls.py)代替在WizardViewdjango form wizard - 在views.py(WizardView子類)中定義form_list和condition_dict,不在urls.py

這意味着該子類提供它寫urls.py而不是views.py一些邏輯,我認爲這是對django模式,因爲意見模塊應該負責視圖邏輯。

我已經結束了以下內容:

# views.py 
class MyWizard(SessionWizardView): 
    _form_list = (
     ('init', forms.MyWizardFormInit), 
     ('newuser', forms.MyWizardFormNewUser), 
    ) 
    _condition_dict = { 
     'newuser': lambda wizard: (wizard.get_cleaned_data_for_step('init') or {}).get('existing_user') == 'False' 
    } 

urls.py

url(.., MyWizard.as_view(MyWizard._form_list, condition_dict = MyWizard._condition_dict)), 

這看起來真的很傻可笑。 是否有任何正確的方法阻止在urls.py中聲明邏輯,而保持DRY

回答

3

一個稍微乾淨的版本可能是這樣的:

views.py

my_wizard_view = MyWizard.as_view(MyWizard._form_list, condition_dict=MyWizard._condition_dict)) 

urls.py

url(r'^my_wizard/$', my_wizard_view, name='my_wizard') 
+0

它仍然看起來不像「正常」的CBV,但有點更好;)謝謝! – migajek

0

我沒有用WizardWiev還,但你有沒有嘗試在WizardView子類中設置這些屬性,而不是通過url def來傳遞它們從頭?或者,提出這個問題,你有沒有試圖超載WizardView.get_form方法?

+0

這些是查看屬性,而不是表單屬性(順便說一下,表單屬性有get_form_kwargs)。問題是不能在WizardView的子類上設置它,因爲它會導致很多奇怪的錯誤,並且 - 根據django文檔 - 正確的方法是通過url配置傳遞它。同樣,它僅適用於WizardView,並打破CBV的「標準」行爲。這就是我問這個問題的原因;) – migajek

相關問題