0

今天我开始在 django 1.4 中使用表单向导。该功能似乎很好,但根据文档,需要将form_list(和condition_dict,必要时)传递给as_view方法(这意味着urls.py)而不是在子类中提供它WizardView

这意味着在内部编写一些逻辑,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

4

2 回答 2

4

稍微干净一点的版本可能如下所示:

视图.py

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

网址.py

url(r'^my_wizard/$', my_wizard_view, name='my_wizard')
于 2012-12-02T12:37:11.953 回答
0

我还没有使用过 WizardWiev,但是您是否尝试过在 WizardView 子类本身上设置这些属性,而不是通过 url 定义传递它们?或者,提交该文件,您是否尝试过重载该WizardView.get_form方法?

于 2012-12-03T11:56:55.900 回答