django表单向导 - 在views.py(WizardView子类)中定义form_list和condition_dict,而不是在urls.py中

时间:2012-12-02 11:54:44

标签: django django-class-based-views django-formwizard

今天我开始在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 中声明逻辑,而保持干燥

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

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